随笔-80  评论-24  文章-0  trackbacks-0
 1 Node *unitelist(Node *r1, Node *r2)
 2 {
 3     if (r1)
 4     {
 5         if (!r2)
 6         {
 7             return r1;
 8         }
 9     }
10     else
11     {
12         return r2;
13     }
14 
15     Node *p1 = r1->next, *q1 = r1, *p2 = r2->next;
16 
17     while (p1 && p2)
18     {
19         if (p2->data < p1->data)
20         {
21             q1->next = p2;
22             p2 = p2->next;
23             q1->next->next = p1;
24             q1 = q1->next;
25         }
26         else
27         {
28             p1 = p1->next;
29             q1 = q1->next;
30         }
31     }
32 
33     if (!p1)
34     {
35         q1->next = p2;
36     }
37 
38     free(r2);
39     return r1;
40 }

r1和r2分别是两个包含空头节点的有序(从小到大)链表,要求合并两个链表,返回合并后的链表头。

另外还有一个递归版本,考虑两个无空头节点的链表,代码比较简单:

 1 node *merge_list(node *first, node *second)
 2 {
 3     if (!first) return second;
 4     if (!second) return first;
 5 
 6     node *head;
 7     if (first->data < second->data)
 8     {
 9         head = first;
10         head->next = merge_list(first->next, second);
11     }
12     else
13     {
14         head = second;
15         head->next = merge_list(first, second->next);
16     }
17     return head;
18 }
19 
posted on 2011-05-02 23:18 myjfm 阅读(596) 评论(0)  编辑 收藏 引用 所属分类: 算法基础

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理