LeetCode 207.移除链表元素
大家好,我是灵魂画师--茄子。技术水平一般,喜欢画画。
开始今天的正题。
删除链表中等于给定值 val 的所有节点。
示例:
输入: 1->2->6->3->4->5->6, val = 6
输出: 1->2->3->4->5
题解:
1.递归解法
思路:
- 递归终止条件,当前项为null;
- 让当前节点的next指向下一个节点;(递归这里)
- 如果当前节点的val值与val值相同那么就返回,当前节点的下一个节点,如果不是就返回当前节点。
let removeElements = function (head, val) {
if (head == null) {
return head
}
head.next = removeElements(head.next, val);
return head.val === val ? head.next : head;
};
2.哨兵解法
思路:
- 设置一个伪头,让pre指向伪头,cur指向head。
- 前进pre跟cur。
- 如果cur的val与val相同那么让pre.next指向cur.next,如果不同则前进节点即可。
let removeElements = function (head, val) {
let dummyHead = new ListNode(); // 设置哨兵节点
dummyHead.next = head;
let pre = dummyHead; // 设置pre
let cur = head; // 设置cur
while (cur != null) { // 判断cur是否为null
if (cur.val !== val) { // 值不相同的话,前进pre跟cur
pre = cur;
cur = cur.next;
} else { // 相同,pre.next指向cur.next 3->null
pre.next = cur.next;
cur = pre.next;
}
}
return dummyHead.next;
};
以上就是我的思路以及解法了,希望大家喜欢我画的图解,我会继续努力的ヾ(◍°∇°◍)ノ゙。(点个赞把我带走吧~~)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。