两个有序链表的合并

 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称为野指针。

posted @ 2013-09-24 09:55  玩的就是 心跳  阅读(163)  评论(0编辑  收藏  举报