链表合并(反思自己的链表学习!!!!)

Posted dazhu123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了链表合并(反思自己的链表学习!!!!)相关的知识,希望对你有一定的参考价值。

1:题目描述

输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。

示例1:

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/he-bing-liang-ge-pai-xu-de-lian-biao-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2:题目分析

  首先注意链表和数组的区别,在对数组操作时,如果不想再原本的数组上操作,则必须new一个新的数组空间。而链表则只需要增加增加一个head就可以了。

本题的解决思路如下;

  1. 初始化curL1Node和curL2Node指向两个带合并的链表head,新建一个newHead节点。
  2. 比较curL1Node和curL2Node,将小者移到newHead后。
  3. 小者后移一位。
  4. 重复2-3,直到其中有一个null。
  5. 将不为null的链表置于newHead后
  6. return newHead.next即可

在原始的链表上操作容易混乱,所以最好新建一个newHead节点,用来将节点移到这里容易表示。

3:代码示例

class Solution {
    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        ListNode curL1Node = l1;
        ListNode curL2Node = l2;

        ListNode newHead = new ListNode(0);
        ListNode curNewNode = newHead;


        while (true) {
            //l1或l2遍历完后,则结束。
            if (curL1Node == null || curL2Node == null) {
                break;
            } else {
                //curL1Node.val和curL2Node.val
                //则较小节点放在newHead后。
                if (curL1Node.val <= curL2Node.val) {
                    curNewNode.next = curL1Node;
                    //较小节点后移
                    curL1Node = curL1Node.next;
                } else {
                    curNewNode.next = curL2Node;
                    //较小节点后移
                    curL2Node = curL2Node.next;
                }
                //newHead节点后移
                curNewNode = curNewNode.next;
            }
        }
        //一旦退出循环,则意味着有链表已经为null,
        // 将不为null都移到newHead后面
        if(curL1Node!=null){
            curNewNode.next = curL1Node;
        }
        if(curL2Node!=null){
            curNewNode.next = curL2Node;
        }
        return newHead.next;
    }
}

 

以上是关于链表合并(反思自己的链表学习!!!!)的主要内容,如果未能解决你的问题,请参考以下文章

《剑指Offer》题目:合并两个排序的链表

剑指offer 合并两个排序的链表

代码的鲁棒性:合并两个排序的链表

《剑指Offer——合并两个排序的链表,两个链表的第一个公共节点》代码

java牛客BM4.合并两个排序的链表 BM5. 合并k个已排序的链表

剑指offer合并两个排序的链表