一些算法题

题目 两个数组的交集

思路: 在一个while循环中不断寻找两个链表的最小值,将其加入结果链表,同时该数据指针向后一位,结果链表也许要向后一位,假如while循环完成还存在某一个未处理的链表数据,直接加入到结果链表

https://leetcode-cn.com/problems/merge-two-sorted-lists/

时间复杂度:O(n)

空间复杂度:O(1)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/**
* @param {ListNode} list1
* @param {ListNode} list2
* @return {ListNode}
*/
var mergeTwoLists = function (list1, list2) {
let res = new ListNode(0) // 结果
let p0 = res;
let p1 = list1 // 指针
let p2 = list2 // 指针
while (p1 && p2) {
// 找到小的值,将其被指向p0,同时概念表后移一位
if (p1.val < p2.val) {
p0.next = p1
p1 = p1.next
} else {
p0.next = p2
p2 = p2.next
}
// 每次p0都会增加指向,,所以需要每次都手动指向最后一位
p0 = p0.next
}
// p1或者p2其中一个还存在值,则全部消化掉
if (p1) {
p0.next = p1
} else if (p2) {
p0.next = p2
}
return res.next
};