力扣刷题笔记-21 合并两个有序链表
其实不回答就是答案
双指针
class Solution {
public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
ListNode dummy = new ListNode(-1);
ListNode p = dummy;
ListNode p1 = list1,p2 = list2;
while (p1 != null && p2 != null){
if (p1.val > p2.val){
p.next = p2;
p2 = p2.next;
} else {
p.next = p1;
p1 = p1.next;
}
p = p.next;
}
if (p1 != null){
p.next = p1;
}
if (p2 != null) {
p.next = p2;
}
return dummy.next;
}
}
思想
- 两个指针分别指向两个链表
- 新的链表,dummy是虚拟头节点,(现在还不知道为啥这么做)
- p1和p2对比,谁小,谁连接到新的链表的,末尾
- while循环的条件是两个链表都不为空
- 如果有一个为空,那就结束了
- 然后把剩下那个不为空的直接p.next = p1/2
tips
- p是新链表的指针,是从虚拟头节点也就是-1开始的,所以你需要进行后移去接收新的数据,也就是p.next
- 为了方便对比,每次p1/2用完之后,后移一下。也就是被比较的,要主动后移