Java数据结构系列之单向链表
class Node {
protected Integer orderNo;
protected String data;
protected Node next;
public Node(Integer orderNo, String data, Node next) {
this.orderNo = orderNo;
this.data = data;
this.next = next;
}
public Node(int orderNo, String data) {
this.orderNo = orderNo;
this.data = data;
}
public Node () {
}
@Override
public String toString() {
return "Node{" +
"orderNo=" + orderNo +
", data='" + data + '\'' +
'}';
}
}
class LinkedList {
private Node head = new Node(0, null, null);
public void addData(Node newNode) {
Node temp = head;
while (true) {
if (temp.next == null) {
break;
}
temp = temp.next;
}
temp.next = newNode;
}
public void addDataByOrder(Node newNode) {
Node temp = head;
while (true) {
if (temp.next == null) {
break;
}
if (newNode.orderNo < temp.next.orderNo) {
break;
}
temp = temp.next;
}
newNode.next = temp.next;
temp.next = newNode;
}
public void updateData(Node node) {
if (head.next == null) {
return;
}
Node temp = head;
boolean flag = false;
while (true) {
if (temp.next == null) {
break;
}
if (temp.next.orderNo.equals(node.orderNo)) {
flag = true;
break;
}
temp = temp.next;
}
if (flag) {
temp.next.data = node.data;
}
}
public void deleteData(Node node) {
if (head.next == null) {
return;
}
Node temp = head;
boolean flag = false;
while (true) {
if (temp.next == null) {
break;
}
if (temp.next.orderNo.equals(node.orderNo)) {
flag = true;
break;
}
temp = temp.next;
}
if (flag) {
temp.next = temp.next.next;
} else {
System.out.println("delete finished");
}
}
public void showLinkedList() {
if (head.next == null) {
System.out.println("end >>>>>>>>>>>>>>>>>>>>");
}
Node temp = head;
while (true) {
System.out.println(temp);
if (temp.next == null) {
break;
}
temp = temp.next;
}
System.out.println("end >>>>>>>>>>>>>>>>>>>>");
}
public Long dataSize() {
Node temp = head;
long count = 0;
while (temp.next != null) {
count++;
temp = temp.next;
}
return count;
}
public Node indexCountBackwards(long index) {
if (head.next == null) {
return null;
}
Long dataSize = dataSize();
if (index > dataSize || index < 0) {
return null;
}
Node temp = head.next;
for (int i = 0; i < dataSize; i++) {
if (i == (dataSize - index)) {
return temp;
}
temp = temp.next;
}
return null;
}
public LinkedList reverse() {
if (head.next == null) {
return new LinkedList();
}
LinkedList linkedList = new LinkedList();
Node newHead = linkedList.head;
Node temp = head.next;
while (temp != null) {
Node newNode = new Node(temp.orderNo, temp.data);
newNode.next = newHead.next;
newHead.next = newNode;
temp = temp.next;
}
return linkedList;
}
public void reverse(Node oldNode) {
if (oldNode.next == null || oldNode.next.next == null) {
return;
}
Node current = head.next;
Node next;
Node newNode = new Node(0, "");
while (current != null) {
next = current.next;
current.next = newNode.next;
newNode.next = current;
current = next;
}
head.next = newNode.next;
}
public void reversePrinting() {
Stack<Node> nodes = new Stack<>();
Node node = head.next;
while (node != null) {
nodes.push(node);
node = node.next;
}
while (!nodes.empty()) {
System.out.println(nodes.pop());
}
}
public Node getHead() {
return head;
}
}
import java.util.Stack;
public class LinkedListDemo {
public static void main(String[] args) {
Node node1 = new Node(1, "This");
Node node2 = new Node(2, "is");
Node node3 = new Node(3, "a");
Node node4 = new Node(4, "test");
Node node5 = new Node(5, "demo");
LinkedList linkedList = new LinkedList();
linkedList.addData(node1);
linkedList.addData(node2);
linkedList.addData(node3);
linkedList.addData(node4);
linkedList.addData(node5);
linkedList.showLinkedList();
Node node = new Node(3, "another");
linkedList.updateData(node);
linkedList.showLinkedList();
linkedList.deleteData(node);
linkedList.showLinkedList();
LinkedList orderedLinkedList = new LinkedList();
orderedLinkedList.addDataByOrder(node1);
orderedLinkedList.addDataByOrder(node4);
orderedLinkedList.addDataByOrder(node3);
orderedLinkedList.addDataByOrder(node5);
orderedLinkedList.addDataByOrder(node2);
orderedLinkedList.showLinkedList();
LinkedList oldLinkedList = new LinkedList();
Node nodeA = new Node(1, "AAA", null);
Node nodeB = new Node(2, "BBB", null);
Node nodeC = new Node(3, "CCC", null);
Node nodeD = new Node(4, "DDD", null);
Node nodeE = new Node(5, "EEE", null);
oldLinkedList.addData(nodeA);
oldLinkedList.addData(nodeB);
oldLinkedList.addData(nodeC);
oldLinkedList.addData(nodeD);
oldLinkedList.addData(nodeE);
oldLinkedList.showLinkedList();
System.out.println("------------------------------");
oldLinkedList.reverse(oldLinkedList.getHead());
oldLinkedList.showLinkedList();
oldLinkedList.reversePrinting();
}
}