代码随想录算法训练营第三天 | 203.移除链表元素、707.设计链表、206.反转链表
203. 移除链表元素
tag: #链表
leetcode 地址:203. 移除链表元素
代码:
function removeElements(head: ListNode | null, val: number): ListNode | null {
const newHead = new ListNode()
newHead.next = head
let tem = newHead
while(tem && tem.next) {
if(tem.next.val === val) {
tem.next = tem.next.next
}else {
tem = tem.next
}
}
return newHead.next
};
思路解析:
- 用一个新的节点作为头部即可
707. 设计链表
tag: #链表
leetcode 地址:707. 设计链表
代码:
class MyLinkedList {
vHead: ListNode = new ListNode()
constructor() {
const node = new ListNode()
this.vHead = node
}
get(index: number): number {
let temHead = this.vHead.next
while(index-- && temHead) {
temHead = temHead.next
}
if(temHead) {
return temHead.val
}
return -1
}
addAtHead(val: number): void {
const newHead = new ListNode(val)
newHead.next = this.vHead.next
this.vHead.next = newHead
}
addAtTail(val: number): void {
let temHead = this.vHead
while(temHead.next){
temHead = temHead.next
}
temHead.next = new ListNode(val)
}
addAtIndex(index: number, val: number): void {
let temHead = this.vHead
while(index-- && temHead.next) {
temHead = temHead.next
}
if(index>=0) return
const newNode = new ListNode(val)
if(temHead && temHead.next) {
newNode.next = temHead.next
}
temHead.next = newNode
}
deleteAtIndex(index: number): void {
let temHead = this.vHead
while(index-- && temHead.next) {
temHead = temHead.next
}
if(temHead && temHead.next) temHead.next = temHead.next.next
}
}
/**
* Your MyLinkedList object will be instantiated and called as such:
* var obj = new MyLinkedList()
* var param_1 = obj.get(index)
* obj.addAtHead(val)
* obj.addAtTail(val)
* obj.addAtIndex(index,val)
* obj.deleteAtIndex(index)
*/
思路解析:
- 设置虚拟头部节点
206. 反转链表
tag: #链表 #反转
leetcode 地址:206. 反转链表
代码:
function reverseList(head: ListNode | null): ListNode | null {
let cur = head
let prev = null
while(cur) {
const next = cur.next
cur.next = prev
prev = cur
cur = next
}
return prev
};
// 递归
function reverseList(head: ListNode | null): ListNode | null {
function recur(preNode: ListNode | null, curNode: ListNode | null): ListNode | null {
if (curNode === null) return preNode;
let next: ListNode | null = curNode.next;
curNode.next = preNode;
preNode = curNode;
curNode = next;
return recur(preNode, curNode);
}
return recur(null, head);
};
浙公网安备 33010602011771号