LeetCode 21 合并两个有序链表
五一的第一天,先祝自己节日快乐!(五一玩疯了,五月六号才开始重新打卡)
补一下之前落下的题,5/1号的是一道easy,合并两个有序链表。
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
可以从这道题入门双指针和单调队列的思想,简而言之逻辑顺序就是
- 比较candidates,需要考虑边界情况
- 把比较出来的符合条件的candidate加入到结果中
- 把candidates更新状态
- 处理停止条件
这道题中每次比较的candidates是两个链表中的元素
比较的标准是ListNode的值小的就为结果
更新条件是把candidates变成他们的next
停止条件是至少有一个链表已经到头了
附上代码
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
ListNode head = new ListNode(0);
ListNode temp = head;
while (true){
if (l1 == null){
temp.next = l2;
return head.next;
}
if (l2 == null){
temp.next = l1;
return head.next;
}
if (l1.val <= l2.val){
temp.next = l1;
l1 = l1.next;
}
else{
temp.next = l2;
l2 = l2.next;
}
temp = temp.next;
}
}
}