剑指Offer - 合并两个排序的链表(java语言实现)

题目描述:

输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。

思路分析:
其实本题的思路和归并排序时的合并两个数组类似,只不过这里合并两个链表不需要占用额外的空间。
1,先判断两个链表是否都为空,并返回null。
2,判断两个链表其中是否有一个是空链表,则返回另一个链表。
3,当两个链表均不为空时,需要新建两个next引用用来保存两个链表头结点的下一个节点。先比较两个链表的头结点的值,并将值小的节点的下个节点用next记录下来,并将该节点的next指针指向值较大的节点,较小值所在的链表的头结点用next节点表示。
4,当某个链表为空时,根据初始链表的头结点的值来判定返回的头结点。

代码实现如下

public class Solution {
    public ListNode Merge(ListNode list1,ListNode list2) {
        
        if(list1 == null && list2 == null){
            return null;
        }
        if(list1 == null)
            return list2;
        if(list2 == null)
            return list1;
            
        ListNode next1 = null;//保存头结点的下一个节点。
        ListNode next2 = null;
        ListNode cur1 = list1;//记录零时头结点。
        ListNode cur2 = list2;
        while(cur1 != null && cur2 != null){
            if( cur1.val <= cur2.val){
                next1 = cur1.next;
                cur1.next = cur2;
                cur1 = next1;
            }else{
                next2 = cur2.next;
                cur2.next = cur1;
                cur2 = next2;
            }
        }
        if(list1.val <= list2.val)
            return list1;
        else
            return list2;
    }
}

其实本体还可以用递归的思想来解决。
参考牛客网上的某位大佬的解法:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/justlikeu777/article/details/84484951