合并两个有序链表是一道很常见的提醒,可以利用分治思想用递归实现,或者是不用递归,递归比较难理解。下面给出非递归的方法。
/*
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(-1);
head.next=null;
ListNode root=head;
while(list1!=null&&list2!=null) {
if(list1.val<list2.val){
head.next=list1;
head=list1;
list1=list1.next;
}
else {
head.next=list2;
head=list2;
list2=list2.next;
}
}
//如果有一个链表为空,另一个链表非空,则应该把非空链表合并到链表尾部。
if(list1!=null) {
head.next=list1;
}
if(list2!=null) {
head.next=list2;
}
return root.next;
}
}
首先我们创建一个新的节点,用来存合并新的链表,这样比较好实现,然后分别比较链表1和2的值,这样其实是打乱了原来的两个链表。