问题描述:
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
分析:
定义一个新的链表,用来存放合并后的链表,并记录该链表的头结点。
1.判断list1是否为空,如果为空直接返回list2。同样,判断list2是否为空,如果为空直接返回list1。
2.当list1和list2同时都不为空时,开始循环比较list1和list2的val值,比较谁的值最小,list就存放谁的值。存放后,链表向后移动。
3.当退出循环也就意味着有一个链表为空了,此时在次判断,哪一个链表为空。如果list1 为空,那么把list2剩下的左右节点都给list。反之,如果list2 为空,那么把list1剩下的左右节点都给list。
4.返回开始记录的头结点的next值即可。(头结点是null,他的next节点才是我们需要的返回的新的链表的头指针)
public class ContactLinkedlist {
class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
public ListNode Merge(ListNode list1,ListNode list2) {
ListNode list = new ListNode(-1);//空链表
ListNode head = list;
if(list1 == null){
return list2;
}
if(list2 == null){
return list1;
}
while(list1 != null && list2 != null){
if(list1.val > list2.val){
list.next = list2;
list2 = list2.next;
}else{
list.next = list1;
list1 = list1.next;
}
list = list1.next;
}
if(list1 != null){
list.next = list1;
}
if(list2 != null){
list.next = list2;
}
return head.next;
}
}