题解 | #从单向链表中删除指定值的节点#
从单向链表中删除指定值的节点
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; } } } }