一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第4天,点击查看活动详情。
1.题目一
203. 移除链表元素
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。
示例 1:
输入:head = [1,2,6,3,4,5,6], val = 6 输出:[1,2,3,4,5]
示例 2:
输入:head = [], val = 1 输出:[]
示例 3:
输入:head = [7,7,7,7], val = 7 输出:[]
思路
思路:链表常规解题法,创建dummy指针(题解中的cur),通过判断当前指针的下一节点的值是否为val解题: 如果为val,那么将当前指针的下一指针指向当前指针的下一指针的下一指针cur.next = cur.next.next,否则,正常指向当前指针的下一指针cur = cur.next。
代码
将当前指针的下一指针指向当前指针的下一指针的下一指针cur.next = cur.next.next
var removeElements = function(head, val) {
let fastHead = new ListNode()
fastHead.next = head;
let fast = head;
let low = fastHead
while(fast.next) {
if(fast.val === val) {
fast = fast.next;
low.next = fast;
}
low = fast;
fast = fast.next
}
return fastHead.next
};
1.题目二
206. 反转链表
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
示例 1:
输入:head = [1,2,3,4,5] 输出:[5,4,3,2,1]
示例 2:
输入:head = [1,2] 输出:[2,1]
示例 3:
输入:head = [] 输出:[]
提示:
- 链表中节点的数目范围是
[0, 5000] -5000 <= Node.val <= 5000
思路
定义两个指针: prepre 和 curcur ;prepre 在前 curcur 在后。 每次让 prepre 的 nextnext 指向 curcur ,实现一次局部反转 局部反转完成之后,prepre 和 curcur 同时往前移动一个位置 循环上述过程,直至 prepre 到达链表尾部
代码
定义两个指针: prepre 和 curcur ;prepre 在前 curcur 在后。
每次让 prepre 的 nextnext 指向 curcur ,实现一次局部反转
局部反转完成之后,prepre 和 curcur 同时往前移动一个位置
var reverseList = function(head) {
let pre = null;
let cur = head;
while(cur) {
temp = cur.next;
cur.next = pre;
pre = cur;
cur = temp;
}
return pre
};