剑指 Offer 25. 合并两个排序的链表


剑指 Offer 25. 合并两个排序的链表

解题思路

第一想法就是双指针。单链表一般用快慢指针,剩下的一般用普通双指针。本题核心思路,新建一个链表,然后遍历比较l1,l2当前的节点,把小的那个放到新链表去,多次重复。

代码

/**
 * 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 fake=new ListNode(0);//伪节点
        ListNode cur=fake;//当前节点:新节点要添加到cur后

        while(l1 != null && l2 != null){
            if(l1.val<l2.val){
                cur.next=l1;//加入到新链表
                l1=l1.next;//移动到下一个待判断的节点
            }else {
                cur.next = l2;
                l2 = l2.next;
            }
            cur=cur.next;//更新cur
        }
         //判断那个链表走到了尽头,将未走到尽头的链表全部追加在cur后边
         if(l1==null){
             cur.next=l2;
         }else{
             cur.next=l1;
         }
        //最开始建立了一个伪节点0,现在要丢掉它
         return fake.next;
    }
}

文章作者: fFee-ops
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 fFee-ops !
评论
  目录