文章目录
前言
链表有数据域与指针域,相对于顺序表而言,链表的插入和删除比较快,但是查找的时候却慢了很多
1290. 二进制链表转整数
题目链接
思路
- 将每个元素转成字符串进行相加
- 将字符串转成数字
题解
/**
* @param {ListNode} head
* @return {number}
*/
var getDecimalValue = function(head) {
let str = ''
while(head){
str+=head.val
head = head.next
}
return parseInt(str, 2);
};
237. 删除链表中的节点
题目链接
思路
由于题目已经给的一个节点,只需改变此节点的指针即可
题解
var deleteNode = function(node) {
node.val = node.next.val
node.next = node.next.next
};
剑指 Offer II 024. 反转链表
题目链接
思路
- 创建一个前驱节点pre,后驱节点next
如图最重要的就是将next指针改变,所以上面创建那两个变量就很重要了
- 首先存住下一个节点
- 改变下一个指针为前驱节点
- 将当前数据存入前驱节点
- 前进一步
题解
function reverseList(head: ListNode | null): ListNode | null {
let pre: ListNode = null, next: ListNode = null
while (head != null) {
next = head.next
head.next = pre
pre = head
head = next
}
return pre
};
1019. 链表中的下一个更大节点
题目链接
思路
- 遍历链表,每次将链表元素和栈顶元素进行比较,如果它比栈顶元素大,则栈顶元素的下一个更大的元素就找到了,记录,弹出栈顶
- 然后将链表元素入栈
- 删除对于元素并返回
题解
function nextLargerNodes(head: ListNode | null): number[] {
let res = new Array(10000).fill(0), stack = [], i = 0
while (head) {
while (stack.length && head.val > stack[stack.length - 1][0]) {
let index = stack.pop()[1]
res[index] = head.val
}
stack.push([head.val, i])
head = head.next
i++
}
while (stack.length) {
let index = stack.pop()[1]
stack.pop()
res[index] = 0
}
while (res.length > i) {
res.pop()
}
return res
};