题目:合并两个排序的链表
题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
解题思路:
思路: 比较两个链表的首结点,哪个小的的结点则合并到第三个链表尾结点,并向前移动一个结点。 步骤一结果会有一个链表先遍历结束,或者没有
第三个链表尾结点指向剩余未遍历结束的链表 返回第三个链表首结点。
代码实现:
注:这里我创建了第三条链表,未修改原来的两个链表。
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode Merge(ListNode list1,ListNode list2) {
/*
* 考虑代码的鲁棒性问题:
* (1) 当第一个链表是空链表,也就是它的头节点是一个空指针的时候,那么把它和第二个链表合并,结果是第二个链表
* (2) 当第二个链表是空链表,也就是它的头节点是一个空指针的时候,那么把它和第一个链表合并,结果是第一个链表
*/
if(list1==null && list2==null) {
return null;
}else if(list1!=null && list2==null) {
return list1;
}else if(list1==null && list2!=null) {
return list2;
}else {
//新建一个头节点,用来存合并的链表。
ListNode curN=new ListNode(-1);
ListNode cur=curN;
while(list1!=null && list2!=null) {
if(list1.val<list2.val) {
cur.next=list1;
cur=cur.next;
list1=list1.next;
}else {
cur.next=list2;
cur=cur.next;
list2=list2.next;
}
}
//把未结束的链表连接到合并后的链表尾部
while(list1!=null) {
cur.next=list1;
cur=cur.next;
list1=list1.next;
}
while(list2!=null) {
cur.next=list2;
cur=cur.next;
list2=list2.next;
}
return curN.next;
}
}
}