题目描述:
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
思路分析:
其实本题的思路和归并排序时的合并两个数组类似,只不过这里合并两个链表不需要占用额外的空间。
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;
}
}
其实本体还可以用递归的思想来解决。
参考牛客网上的某位大佬的解法: