题解 | #从单向链表中删除指定值的节点#
从单向链表中删除指定值的节点
https://www.nowcoder.com/practice/f96cd47e812842269058d483a11ced4f
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
int n = in.nextInt();
int first = in.nextInt();//头结点
int[][] array = new int[n - 1][2];
for (int i = 0; i < n - 1; i++) {
array[i][0] = in.nextInt();
array[i][1] = in.nextInt();
}
int deleteKey = in.nextInt();
in.close();
LinkList list = new LinkList(n);
list.insertFirst(first);
for (int i = 0; i < array.length; i++) {
if(list.isContainTheKey(array[i][0])){
list.insertAfter(array[i][0],array[i][1]);
// list.display();
}else{
list.insertBefore(array[i][1],array[i][0]);
// list.display();
}
}
list.deleteByKey(deleteKey);
list.display();
}
static class Link {
public int data;
public Link next;
Link(int data) {
this.data = data;
}
public int peek() {
return data;
}
}
static class LinkList {
private Link first;
private int size;
String [] result = new String[size];
public LinkList(int n) {
first = null;
size = n;
}
public boolean isEmpty() {
return (first == null);
}
public void insertFirst(int data) {
Link newLink = new Link(data);
newLink.next = first;//下一个为空
first = newLink;
}
public Link deletFirst() {
Link temp = first;
first = first.next;
return temp;
}
public void display() {
// System.out.println();
String str = "";
Link current = first;
while (current != null) {
// current.display();
str += current.data + " ";
current = current.next;
}
result = str.split(" ");
for (int i = result.length - 1; i >= 0; i--) {
System.out.print(result[i]+" ");
}
}
public boolean isContainTheKey(int k) {
Link current = first;
while (current.next != null) {
current = current.next;
if (current.data == k)
return true;
}
return false;
}
public void insertLast(int data) {
Link last = new Link(data);
Link current = first;
while (current.next != null) {
current = current.next;
}
current.next = last;
}
public void deleteByKey(int key) {
Link previous = first;
Link current = first;
while (current.data != key) {
previous = current;
current = current.next;
}
if (first == current) {
first = first.next;
} else {
previous.next = current.next;
}
size--;
}
public void insertBefore(int key, int data) {
if (key == first.data) {
insertFirst(data);
// this.display();
} else {
Link previous = first;
Link current = first;
Link insert = new Link(data);
while (current.data != key && current.next != null) {
previous = current;
current = current.next;
}
previous.next = insert;
insert.next = current;
}
}
public void insertAfter(int key, int data) {
Link current = first;
Link after = first;
Link insert = new Link(data);
while (current.next != null && current.data != key) {
current = current.next;
current.next = after;
}
if (current.next == null) {
current.next = insert;
} else {
current.next = insert;
insert.next = after;
}
}
}
}