package com.tyxh.link;
//節(jié)點(diǎn)類
public class Node {
protected Node next; //指針域
protected int data;//數(shù)據(jù)域
public Node( int data) {
this. data = data;
}
//顯示此節(jié)點(diǎn)
public void display() {
System. out.print( data + " ");
}
}
package com.tyxh.link;
//單鏈表
public class LinkList {
public Node first; // 定義一個(gè)頭結(jié)點(diǎn)
private int pos = 0;// 節(jié)點(diǎn)的位置
public LinkList() {
this. first = null;
}
// 插入一個(gè)頭節(jié)點(diǎn)
public void addFirstNode( int data) {
Node node = new Node(data);
node. next = first;
first = node;
}
// 刪除一個(gè)頭結(jié)點(diǎn),并返回頭結(jié)點(diǎn)
public Node deleteFirstNode() {
Node tempNode = first;
first = tempNode. next;
return tempNode;
}
// 在任意位置插入節(jié)點(diǎn) 在index的后面插入
public void add(int index, int data) {
Node node = new Node(data);
Node current = first;
Node previous = first;
while ( pos != index) {
previous = current;
current = current. next;
pos++;
}
node. next = current;
previous. next = node;
pos = 0;
}
// 刪除任意位置的節(jié)點(diǎn)
public Node deleteByPos( int index) {
Node current = first;
Node previous = first;
while ( pos != index) {
pos++;
previous = current;
current = current. next;
}
if(current == first) {
first = first. next;
} else {
pos = 0;
previous. next = current. next;
}
return current;
}
// 根據(jù)節(jié)點(diǎn)的data刪除節(jié)點(diǎn)(僅僅刪除第一個(gè))
public Node deleteByData( int data) {
Node current = first;
Node previous = first; //記住上一個(gè)節(jié)點(diǎn)
while (current. data != data) {
if (current. next == null) {
return null;
}
previous = current;
current = current. next;
}
if(current == first) {
first = first. next;
} else {
previous. next = current. next;
}
return current;
}
// 顯示出所有的節(jié)點(diǎn)信息
public void displayAllNodes() {
Node current = first;
while (current != null) {
current.display();
current = current. next;
}
System. out.println();
}
// 根據(jù)位置查找節(jié)點(diǎn)信息
public Node findByPos( int index) {
Node current = first;
if ( pos != index) {
current = current. next;
pos++;
}
return current;
}
// 根據(jù)數(shù)據(jù)查找節(jié)點(diǎn)信息
public Node findByData( int data) {
Node current = first;
while (current. data != data) {
if (current. next == null)
return null;
current = current. next;
}
return current;
}
}
package com.tyxh.link;
//測(cè)試類
public class TestLinkList {
public static void main(String[] args) {
LinkList linkList = new LinkList();
linkList.addFirstNode(20);
linkList.addFirstNode(21);
linkList.addFirstNode(19);
//19,21,20
linkList.add(1, 22); //19,22,21,20
linkList.add(2, 23); //19,22,23,21,20
linkList.add(3, 99); //19,22,23,99,21,20
linkList.displayAllNodes();
// Node node = linkList.deleteFirstNode();
// System.out.println("node : " + node.data);
// linkList.displayAllNodes();
// node = linkList.deleteByPos(2);
// System.out.println("node : " + node.data);
// linkList.displayAllNodes();
// linkList.deleteFirstNode();
Node node = linkList.deleteByData(19);
// Node node = linkList.deleteByPos(0);
System. out.println( "node : " + node. data);
linkList.displayAllNodes();
Node node1 = linkList.findByPos(0);
System. out.println( "node1: " + node1. data);
Node node2 = linkList.findByData(22);
System. out.println( "node2: " + node2. data);
}
}