题解 | #合并两个排序的链表#
合并两个排序的链表
http://www.nowcoder.com/practice/d8b6b4358f774294a89de2a6ac4d9337
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
/*
分别使用两个指针来遍历两个链表
遍历结束的条件当这两个指针有一个等于null
每次遍历把节点值小的节点加入到新的链表中,然后指针后移
遍历结束
把没有便利完的链表加入新链表末尾
返回新链表
*/
public ListNode Merge(ListNode list1,ListNode list2) {
ListNode p = list1,q = list2;
ListNode temp = null; // 用于指向需要加入新链表的节点
ListNode returnList = new ListNode(-1); // 返回的链表的头节点
ListNode tail = returnList; // 链表的尾节点,用于尾插入
while(p != null && q != null){
if(p.val <= q.val){
temp = p; // 把节点拿出来
p = p.next; // 指针后移
// 插入节点
temp.next = tail.next;
tail.next = temp;
// 尾指针后移
tail = tail.next;
}else{
temp = q; // 把节点拿出来
q = q.next; // 指针后移
// 插入节点
temp.next = tail.next;
tail.next = temp;
// 尾指针后移
tail = tail.next;
}
}
if(p != null){
// 把剩余未遍历到的部分加入新链表
tail.next = p;
}
if(q != null){
// 把剩余未遍历到的部分加入新链表
tail.next = q;
}
return returnList.next; // 返回首节点开始的部分
}
}