分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请轻击人工智能教程
package live.every.day.ProgrammingDesign.CodingInterviewGuide.List;
import java.util.Stack;
/**
* 在单链表中删除指定值的节点
*
* 【题目】
* 给定一个链表的头节点head和一个整数num,请实现函数将值为num的节点全部删除。
*
* 【难度】
* 简单
*
* 【解答】
* 方法一:利用栈或其他容器收集节点的方法。时间复杂度为O(N),额外空间复杂度为O(N)。
*
* 将值不等于num的节点用栈收集起来,收集完成后重新连接即可。最后将栈底的节点作为新的头节点返回。
*
* 具体过程请参看如下代码中的removeNode1方法。
*
* @author Created by LiveEveryDay
*/
public class RemoveNodeInList1 {
public static class Node {
public int data;
public Node next;
public Node(int data) {
this.data = data;
}
}
public static Node removeNode1(Node head, int data) {
Stack<Node> stack = new Stack<>();
while (head != null) {
if (head.data != data) {
stack.push(head);
}
head = head.next;
}
while (!stack.isEmpty()) {
stack.peek().next = head;
head = stack.pop();
}
return head;
}
public static void main(String[] args) {
Node node1 = new Node(1);
Node node2 = new Node(3);
Node node3 = new Node(2);
Node node4 = new Node(3);
Node node5 = new Node(1);
node1.next = node2;
node2.next = node3;
node3.next = node4;
node4.next = node5;
removeNode1(node1, 3);
Node n = node1;
while (n != null) {
System.out.printf("%d ", n.data);
n = n.next;
}
}
}
// ------ Output ------
/*
1 2 1
*/