Fork me on GitHub

leetcode——[021]Merge Two Sorted Lists合并两个有序链表

题目

将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

示例:

1
2
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4

Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.

Example:

1
2
Input: 1->2->4, 1->3->4
Output: 1->1->2->3->4->4

解题方法

与合并有序数组策略一致,先将前部分进行比较,直至有一个数组的元素都处理完,然后结果链表的尾节点next指向另一个数组剩下的节点就OK了。这段代码跑了15ms,超过了95.97%的Java提交。

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
36
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
// Method_01 15ms 95.97%
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
ListNode head = new ListNode(-1); // 头结点,不含有效值
ListNode cur = head;
while (l1 != null && l2 != null) {
if (l1.val <= l2.val) {
cur.next = l1;
cur = l1;
l1 = l1.next;
} else {
cur.next = l2;
cur = l2;
l2 = l2.next;
}
}

if (l1 != null) { // 处理剩下的节点
cur.next = l1;
}

if (l2 != null) {
cur.next = l2;
}

return head.next;
}
}
BJTU-HXS wechat
海内存知己,天涯若比邻。