1.定义一个哨兵节点(新链表)
2.然后选取两个节点中其中那个相对较小的加入哨兵链表
3.其中有一个为空的时候,退出循环
4.把最后那个还有剩余节点的链表,连接到哨兵节点的后面
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
//判断特殊情况
if(list1 == null) return list2;
if(list2 == null) return list1;
ListNode oneList = list1;
ListNode twoList = list2;
//创建新的链表
ListNode newList = new ListNode();
ListNode temp = newList; //用于最后输出结果
//循环
while(oneList != null && twoList != null) {
if(oneList.val < twoList.val) {
//将oneList中小的这个加入到新的链表
list1 = oneList;
oneList = oneList.next;
newList.next = list1;
newList = newList.next;
}else {
//将twoList中小的这个加入到新的链表
list2 = twoList;
twoList = twoList.next;
newList.next = list2;
newList = newList.next;
}
}
//结束后说明 oneList或者twoList中有一个或者都没有空
//只需要将不为空的那个加入到新链表的尾部即可
if(oneList != null) {
newList.next = oneList;
}else if(twoList !=null) {
newList.next = twoList;
}
//最后输出链表的第一个节点 即temp.next
//注意这个输出的不是头指针 而是头结点(首元结点)
return temp.next;
}
}