题目要求:
- 给一个链表的头节点 head 和一个整数 val ,删除链表中所有满足 Node.val == val 的节点,并返回新的头结点
- 示例:输入:head = [1,2,6,3,4,5,6], val = 6;输出:[1,2,3,4,5]
解题思路:
第一种解法
1、判断目标值是否为头指针,若是则删除并将下一指针作为头指针
2、若链表集合为空,则直接返回链表
3、若目标值不为头指针,则将头指针指向下一个节点并依次遍历
4、返回删除后的链表
function removeListNode(data: ListNode | null, val: number): ListNode | null {
if(data !== null && data.val === val) {
data = data.next;
}
if(data === null) {
return data;
}
while(data.next.val !== null) {
if(data.next.val === val) {
data.next = data.next.next;
}else {
data = data.next;
}
data = data.next;
}
return data;
}
第二种解法(常用)
1、在链表头部添加虚拟头指针
2、分别定义两个变量接收当前指针及下一个指针
3、对链表依次遍历并删除目标值
4、返回删除后的链表
function removeListNode2(data: ListNode | null, val: number): ListNode | null {
const head = new ListNode(0, data);
let pre: ListNode = head, cur: ListNode | null = head.next;
while(cur){
if(cur.val === val) {
pre.next = cur.next;
}else {
pre = cur;
}
cur = cur.next;
}
return head.next;
}