方法二(无返回值):
(1)无头头插单链表:
#include <stdio.h> #include <stdlib.h> typedef struct person { int age; struct person *next; }per; void head_list(per **one, int num) { per *temp = (per *)malloc(sizeof(per)); temp->age = num; temp->next = (*one); (*one) = temp; } void show(per *head) { if(NULL == head) { return; } while(head) { printf("age is %d\n",head->age); head = head->next; } } per *get_put(per *head,int n) { per *new_list = NULL; if(NULL == head) { return NULL; } while(head) { if(n == head->age) { head_list(&new_list,n); } head = head->next; } return new_list; } int main() { per *head = NULL; head_list(&head,10); head_list(&head,12); head_list(&head,10); head_list(&head,12); head_list(&head,10); head_list(&head,12); show(head); printf("========get new_list========\n"); per *new = get_put(head,12); show(new); return 0; } (2)无头尾插单链表: #include <stdio.h> #include <stdlib.h> typedef struct person { int age; struct person *next; }per; void *tail_list(per **one, int num) { per *temp = (per *)malloc(sizeof(per)); temp->age = num; temp->next = NULL; while(*one) { one = &((*one)->next); } (*one)= temp; } void show(per *head) { if(NULL == head) { return; } while(head) { printf("age is %d\n",head->age); head = head->next; } } per *get_put(per *head, int n) { per *new_list = NULL; while(head) { if(n == head->age) { tail_list(&new_list,n); } head = head->next; } return new_list; } int main() { per *head = NULL; tail_list(&head,10); tail_list(&head,12); tail_list(&head,10); tail_list(&head,12); tail_list(&head,10); tail_list(&head,12); show(head); puts("=======after new_list==========="); per *new = get_put(head,12); show(new); return 0; }