题目链接:https://leetcode-cn.com/problems/merge-two-sorted-lists/
思路:我采用的是没加头节点直接合并两个链表的做法,所以代码量相对来说比较多(题目好像就是要求用没有头结点的方式做)。代码中的newHead永远代表的合并链表的第一个节点,不改变它。通过tmp把两个链表连接起来,l1和l2用来遍历两个链表。最后哪儿个没遍历完,直接连在后面就可以了(针对的是l1,l2不为空的情况,就是最后那个else里面的内容),其他的特殊情况很好理解就不做解释了。
上代码:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
ListNode tmp, newHead;
if (l1 == null && l2 == null) {
newHead = null;
} else if (l1 == null) {
newHead = l2;
} else if (l2 == null) {
newHead = l1;
} else {
if (l1.val < l2.val) {
tmp = l1;
l1 = l1.next;
} else {
tmp = l2;
l2 = l2.next;
}
newHead = tmp;
while (l1 != null && l2 != null) {
if (l1.val < l2.val) {
tmp.next = l1;
tmp = l1;
l1 = l1.next;
} else {
tmp.next = l2;
tmp = l2;
l2 = l2.next;
}
}
if (l1 == null) {
tmp.next = l2;
} else {
tmp.next = l1;
}
}
return newHead;
}
}
551

被折叠的 条评论
为什么被折叠?



