
思路: 新建一个链表头结点。两个指针分别在两个链表头部,比较哪一个小。把小节点放到新的空 头结点下一位。然后新链表与小的节点所在的链表的指针都向后移一位。再次比较。直到某一个链表到尾部。将另一个还未到头的链表的指针所在节点直接接到新链表尾部。
这里我原先是遍历加入的,后来看到可以直接把剩余链表的尾部直接接到新链表尾部。这个方法更好!
最后返回新链表头结点的next节点即可。
/**
* 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) {
ListNode head=new ListNode(0);
if(l1==null ){
return l2;
}
if(l2==null){
return l1;
}
ListNode node=head;
while(l1!=null && l2!=null){
if(l1.val<=l2.val){
node.next=l1;
node=l1;
l1=l1.next;
}else{
node.next=l2;
node=l2;
l2=l2.next;
}
}
if(l1!=null){
node.next=l1;
}
if(l2!=null){
node.next=l2;
}
return head.next;
}
}

本文介绍了一种高效合并两个已排序链表的方法。通过创建一个新的链表头结点,并使用两个指针分别指向两个原始链表的头部开始,比较当前指针所指向节点的大小,较小者被添加到新链表中,随后该节点对应的指针前移。重复此过程直至某个链表遍历结束,将另一个未完成链表的剩余部分直接连接到新链表的末尾。这种方法避免了不必要的遍历操作。
218

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



