在单链表中删除指定值的节点

Posted heibingtai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在单链表中删除指定值的节点相关的知识,希望对你有一定的参考价值。

 

问题描述:

给定一个链表的头结点head和一个整数num,请实现函数将值为num的节点全部删除。

例如:链表为1->2->3->5->3->6->null,num=3,调整后的链表为: 1->2->5->6->null

 

算法实现:

public class Node {

public int value;
public Node next;

public Node(int value) {
this.value = value;
}
}

算法1:
public Node removeValue1(Node head, int num) {

Stack<Node> stack = new Stack<>();
while (head != null) {
if(head.value != num) {
stack.push(head);
}
head = head.next;
}

while (!stack.isEmpty()) {

stack.peek().next = head;
head = stack.pop();
}

return head;
}


算法2:
public Node removeValue2(Node head, int num) {

while (head != null) {

if(head.value != num) {
break;
}
head = head.next;
}

Node pre = head;
Node cur = head;
while (cur != null) {

if(cur.value == num) {
pre.next = cur.next;
} else {
pre = cur;
}
cur = cur.next;
}

return head;
}

 

算法解析:

解法1:

需要一个额外的栈空间,通过将“有效的数据入栈”,之后在出栈的过程中重新“链节点成表”,要注意的是出栈时“head”指向的移动。

解法2:

先通过判断和必要的移动,找到“最终的头结点”,设置两个临时变量指向head, 通过这两个变量的移动、赋值、比较判断,将“最终头指针”之后待删除的节点移除掉。

 

以上是关于在单链表中删除指定值的节点的主要内容,如果未能解决你的问题,请参考以下文章

链表:在不给出整个链表头结点的情况下,删除单链表中的某个节点

链表VS数组

2.2 在单链表和双链表中删除倒数第K个节点

HJ48 从单向链表中删除指定值的节点

#yyds干货盘点# 解决华为机试:从单向链表中删除指定值的节点

华为机试HJ48:从单向链表中删除指定值的节点