合并有序链表

  1. 题意
  2. 分析
  3. 代码

题目

题意

合并两个已排序的链表。

分析

有个有序链表的合并操作其实就是二路归并,也与归并排序算法的合并操作可以说一模一样,如果时两个无序链表的话,可能有趣点,但有序链表何必就是很常规的操作了。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
ListNode* head = new ListNode(-1);
ListNode* p = head;
while (l1 != NULL && l2 != NULL) {
if (l1->val < l2->val) {
p->next = l1;
l1 = l1->next;
p = p->next;
}
else {
p->next = l2;
l2 = l2->next;
p = p->next;
}
}
if (l1 != NULL)
p->next = l1;
else if (l2 != NULL)
p->next = l2;

p = head->next;
delete head;
return p;
}
};

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 yxhlfx@163.com

文章标题:合并有序链表

本文作者:红尘追风

发布时间:2015-07-26, 19:24:46

原始链接:http://www.micernel.com/2015/07/26/%E5%90%88%E5%B9%B6%E6%9C%89%E5%BA%8F%E9%93%BE%E8%A1%A8/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录