两个有序链表的合并
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 typedef struct node 5 { 6 int id; 7 struct node * next; 8 } node; 9 10 node *merge(node *head1, node *head2) 11 { 12 node *pa = head1; 13 node *pb = head2; 14 node *head; 15 node a; 16 node *pc = &a; 17 18 if (pa == NULL) 19 return pb; 20 if (pb == NULL) 21 return pa; 22 23 head = (pa->id > pb->id) ? pb : pa; 24 while (pa && pb) 25 { 26 if (pa->id > pb->id) 27 { 28 pc->next = pb; 29 pc = pb; 30 pb = pb->next; 31 } 32 else 33 { 34 pc->next = pa; 35 pc = pa; 36 pa = pa->next; 37 } 38 } 39 pc->next = pa ? pa : pb; 40 41 return head; 42 }
这是一种比较简单的方法,定义一个node类型的a变量,只是为了使得pc指针在第一次时有指向,防止pc称为野指针。