packagecom.wangzhu.linkedlist;public classLinkedListDemo {/***@paramargs*/
public static voidmain(String[] args) {
LinkedList linkedList= newLinkedList();
Node head= null;
Node reverseHead= null;//链表长度为0
head = newNode();for (int i = 0; i < 0; i++) {
linkedList.add(head,newNode(i));
}
System.out.print("未操作:");
linkedList.print(head);
reverseHead=linkedList.reverse(head);
System.out.print("反转后:");
linkedList.print(reverseHead);
System.out.println();//链表长度为1
head = newNode();for (int i = 0; i < 1; i++) {
linkedList.add(head,newNode(i));
}
System.out.print("未操作:");
linkedList.print(head);
reverseHead=linkedList.reverse(head);
System.out.print("反转后:");
linkedList.print(reverseHead);
System.out.println();//链表长度为2
head = newNode();for (int i = 0; i < 2; i++) {
linkedList.add(head,newNode(i));
}
System.out.print("未操作:");
linkedList.print(head);
reverseHead=linkedList.reverse(head);
System.out.print("反转后:");
linkedList.print(reverseHead);
System.out.println();//链表长度为3
head = newNode();for (int i = 0; i < 3; i++) {
linkedList.add(head,newNode(i));
}
System.out.print("未操作:");
linkedList.print(head);
reverseHead=linkedList.reverse(head);
System.out.print("反转后:");
linkedList.print(reverseHead);
System.out.println();//链表长度为4
head = newNode();for (int i = 0; i < 4; i++) {
linkedList.add(head,newNode(i));
}
System.out.print("未操作:");
linkedList.print(head);
reverseHead=linkedList.reverse(head);
System.out.print("反转后:");
linkedList.print(reverseHead);
System.out.println();//链表长度为5
head = newNode();for (int i = 0; i < 5; i++) {
linkedList.add(head,newNode(i));
}
System.out.print("未操作:");
linkedList.print(head);
reverseHead=linkedList.reverse(head);
System.out.print("反转后:");
linkedList.print(reverseHead);
System.out.println();//未操作:反转后://未操作:0//反转后:0//
//未操作:0 1//反转后:1 0//
//未操作:0 1 2//反转后:2 1 0//
//未操作:0 1 2 3//反转后:3 2 1 0//
//未操作:0 1 2 3 4//反转后:4 3 2 1 0
}
}classNode {intvalue;
Node next;publicNode() {this.value = -1;this.next = null;
}public Node(intvalue) {this.value =value;this.next = null;
}public Node(intvalue, Node next) {this.value =value;this.next =next;
}
}classLinkedList {/*** 后插法
*
*@paramhead
*@paramnode*/
public voidadd(Node head, Node node) {
Node tempNode=head;if (tempNode == null) {return;
}while (tempNode.next != null) {
tempNode=tempNode.next;
}
tempNode.next=node;
}public voidprint(Node head) {
Node node=head;if (node == null || node.next == null) {return;
}
node=node.next;while (node != null) {
System.out.print(node.value+ " ");
node=node.next;
}
System.out.println();
}/*** 链表反转
*
*@paramhead
*@return
*/
publicNode reverse(Node head) {//当链表为空,或链表没有元素
if (head == null || head.next == null) {returnhead;
}//反转头节点
Node reverseHead = newNode();
Node firstNode= head.next;//链表中节点的前一个节点
Node node = firstNode.next; //链表中的节点
Node nextNode = null;if (node != null) {
nextNode= node.next;//链表中的节点的后一个节点
}
firstNode.next= null;while (nextNode != null) {
node.next= firstNode;//将当前节点的后一个一个改为其前一个节点(相对反转之前)
firstNode = node; //将当前节点置为下一节点的前节点
node = nextNode;//获取下一个节点
nextNode = nextNode.next;//获取下一个节点的后一个节点
}if (node != null) {//当节点个数大于1时
node.next =firstNode;
reverseHead.next=node;
}else{//当只有一个节点时
reverseHead.next =firstNode;
}returnreverseHead;
}
}