public class Test {
public static void main(String[] args) {
Node link = createLink(10);
printNodeLink(link);
System.out.print("\n");
Node link2 = reverNodeLink(link);
printNodeLink(link2);
System.out.println("\n链表长度:" + getLinkSize(link2));
}
/**
* 构造一个链表
*
* @return 链表头结点
*/
private static Node createLink(int count) {
Node node = new Node();
node.setValue("n" + count);
if (count > 0) {
node.setNext(createLink(--count));
} else {
node.setNext(null);
}
return node;
}
/**
* 输出链表
*
* @param head
* 链表头结点
*/
private static void printNodeLink(Node head) {
while (head != null) {
System.out.print(head.getValue());
if (head.getNext() != null) {
System.out.print(" -> ");
}
head = head.getNext();
}
}
/**
* 反转链表
*
* @param head
* 操作前链表头结点
* @return 操作后链表头结点
*/
private static Node reverNodeLink(Node head) {
if (null == head || head.getNext() == null) {
return head;
}
Node point = head.getNext();
head.setNext(null);
Node temp = null;
do {
temp = point.getNext();
point.setNext(head);
head = point;
point = temp;
} while (point != null);
return head;
}
/**
* 计算链表长度
*
* @param head
* 链表头结点
* @return 链表长度
*/
private static int getLinkSize(Node head) {
if (head == null) {
return 0;
}
if (head.getNext() == null) {
return 1;
} else {
return 1 + getLinkSize(head.getNext());
}
}
}