合并两个排序的链表
输入:{1,3,5},{2,4,6}
输出:{1,2,3,4,5,6}
解题思路:由于两个链表已经排序好且单调递增,只要我们对比节点的值,哪个小的先放进新建的链表就行了,如果是单调递减也是同理。主要有两种方法,一种是递归,一种是正常的遍历比较大小。
递归:
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode Merge(ListNode list1,ListNode list2) {
if(list1 == null){
return list2;
}
if(list2 == null){
return list1;
}
if(list1.val <= list2.val){
list1.next = Merge(list1.next, list2);
return list1;
}else{
list2.next = Merge(list1, list2.next);
return list2;
}
}
}
非递归:
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode Merge(ListNode list1,ListNode list2) {
ListNode head=new ListNode(0);
head.next=null; //新节点初始化,第一个节点是空的
ListNode nhead=head; //保存新节点头
while(list1!=null&&list2!=null){
if(list1.val<list2.val){
head.next=list1;
head=head.next;
list1=list1.next;
}
else{
head.next=list2;
head=head.next;
list2=list2.next;
}
}
if(list1!=null) //此时list2已经排完了,剩下list1直接接入新节点
head.next=list1;
if(list2!=null)
head.next=list2; //同理
return nhead.next; //返回新节点的头节点下一个节点,因为初始化时第一个节点为空。
}
}