题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
期望:
输入:1→2→3→4, 2→5→6→7
输出:1→2→2→3→4→5→6→7
思路:
建立一个新的链表,依次同步遍历比较两个递增链表中元素的大小,把较小的那个放入新链表,该链表和新链表指针同时后移。
step1:建立一个新链表head,让curr指针指向它.
step2:同时遍历比较list1和list2,把curr与值较小的节点进行连接,同时两个指针后移。
step3:继续迭代,比较其他节点。
step4:两个链表最后肯定有一个链表先遍历完,把没有遍历完的那个链表的剩余部分直接接在新链表的后面。
实现:
public ListNode Merge(ListNode list1,ListNode list2) {
if(list1==null&&list2==null){
return null;
}
if(list2==null){
return list1;
}
if(list1==null){
return list2;
}
ListNode curr=new ListNode(-1); //创建一个当前指针
ListNode root=curr;//头结点
while(list1!=null&&list2!=null){
if(list1.val<list2.val){
curr.next=list1;
list1=list1.next;
}else{
curr.next=list2;
list2=list2.next;
}
curr=curr.next;
}
curr.next=(list1!=null?list1:list2);
return root.next;
}
参考:https://blog.youkuaiyun.com/gjpzl/article/details/80151394