题目描述:
思路想法:
新链表的首节点应该为两个旧链表中首节点较小的那个;
while 循环依次比较两个链表节点的大小,将较小节点加入新的链表,该较小节点所在的旧链表更新为下一个节点;
循环直到其中一个链表的空节点,并判断是哪一个旧链表为空,将另一个旧链表作为新链表的结尾。
Java 代码:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
// 处理链表为空的情况
if(l1==null){return l2;};
if(l2==null){return l1;};
ListNode l3=null;
// 拿到首节点赋给新链表的表头
if(l1.val<=l2.val){
l3=l1;l1=l1.next;}
else{l3=l2;l2=l2.next;}
ListNode head =l3;
// 循环比较并依次收割
while(l1!=null && l2!=null){
if(l1.val<=l2.val){
l3.next=l1;
l1=l1.next;
l3=l3.next;
}
else{
l3.next=l2;
l2=l2.next;
l3=l3.next;
}
}
// 判断哪个旧链表率先为空,并将另一个旧链表加在新链表的结尾
if(l1==null){
l3.next = l2;
}
else if (l2==null){
l3.next=l1;
}
return head;
}
}
核心技能:
链表的指针操作。