链表

23. 合并 K 个升序链表

给你一个链表数组,每个链表都已经按升序排列。

请你将所有链表合并到一个升序链表中,返回合并后的链表。

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
/**
* Definition for singly-linked list.
* function ListNode(val, next) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
*/
/**
* @param {ListNode[]} lists
* @return {ListNode}
*/
var mergeKLists = function(lists) {
if(!lists||lists.length===0){
return null
}
const mergelist = (app,number) =>{
if(number === lists.length){
return app
}
let nextnode = lists[number]
let topnode = app
let fristnode = app.next
let secondenode = nextnode
while(fristnode&&secondenode){
if(fristnode.val>secondenode.val){
let sss = secondenode.next
secondenode.next = topnode.next
topnode.next = secondenode
topnode = secondenode
secondenode = sss
}else{
fristnode = fristnode.next
topnode = topnode.next
}
}
if(fristnode===null){
topnode.next = secondenode
}
return mergelist(app,number+1)
}
let mergelistnode = lists[0] || null
let prelistnode = new ListNode(0,mergelistnode)
return mergelist(prelistnode,1).next
};

19. 删除链表的倒数第 N 个结点

给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。

进阶:你能尝试使用一趟扫描实现吗?

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
/**
* Definition for singly-linked list.
* function ListNode(val, next) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
*/
/**
* @param {ListNode} head
* @param {number} n
* @return {ListNode}
*/
var removeNthFromEnd = function(head, n) {
let app = new ListNode(0,head)
let left = app
let right = app
while(n--){
right = right.next
}
while(right.next){
right = right.next
left = left.next
}
left.next = left.next.next
return app.next
};