import java.util.Stack;
public class LinkedList {
class Node{
int data;
Node next;
public Node(int data) {
this.data=data;
}
}
//删除单链表的指定节点
public static void deleteNode(Node head,Node node) {
//如果删除的节点是尾节点
if (node.next==null) {
while(head.next!=node) {
head=head.next;
}
head.next=null;
}
//如果删除的节点是头结点
else if(head==node) {
head=null;
}
//如果删除的是中间节点
else {
Node p = node.next;
node.data=p.data;
node.next=p.next;
}
}
//删除单链表中指定数值的节点,利用栈
public static Node removeValues(Node head,int num) {
Stack<Node> stack = new Stack<Node>();
//将不等于num的节点,放入到栈中
while(head!=null) {
if (head.data!=num) {
stack.push(head);
}
head = head.next;
}
//将栈组成新的链表
if (stack!=null) {
while(head!=null) {
stack.peek().next=head;
head=stack.pop();
}
}
return head;
}
//删除单链表中指定数值的节点,不用栈
public static Node removeValues2(Node head,int num) {
//找到第一个不等于num的节点作为头结点
while(head!=null) {
if (head.data!=num) {
break;
}
head=head.next;
}
Node pre = head;
Node cur = head;
while(cur!=null) {
if (cur.data==num) {
pre.next = cur.next;
}else {
pre = cur;
}
cur = cur.next;
}
return head;
}
}
单链表的删除
最新推荐文章于 2024-06-27 17:23:53 发布