package org.zl.test.caculateMethod; public class ReverseLinkedList { public static class Node<T>{ public T data; public Node<T> next; public Node(T data) { super(); this.data = data; } @Override public String toString() { return "Node [data=" + data + ", next=" + next + "]"; } } public static class LinkedList<T>{ public Node<T> head; public Node<T> tail; public LinkedList<T> add(Node<T> node){ if (head == null) { head = node; } else { tail.next = node; } tail = node; return this; } /** * 递归实现链表反转 * @param currentNode * @return */ public Node<T> reverse(Node<T> currentNode) { if (currentNode == null) { return null; } if (currentNode.next == null) { this.head = currentNode; return head; } Node<T> pred = reverse(currentNode.next); currentNode.next = null; pred.next = currentNode; this.tail = currentNode; return currentNode; } @Override public String toString() { StringBuilder sb = new StringBuilder(); if (head == null) { return sb.toString(); } Node<T> currentNode = head; while(currentNode != null) { sb.append(currentNode.data).append(','); currentNode = currentNode.next; } return sb.toString(); } } public static void main(String[] args) { LinkedList<Integer> linkedList = new LinkedList<Integer>(); for(int i=1;i<=50;i++) { linkedList.add(new Node<Integer>(i)); } System.out.println("转换前:"+linkedList.toString()); linkedList.reverse(linkedList.head); System.out.println("转换后:"+linkedList.toString()); System.out.println("转换后linkedList的尾节点是:"+linkedList.tail); linkedList.add(new Node<Integer>(-1)); linkedList.add(new Node<Integer>(-2)); linkedList.add(new Node<Integer>(-3)); System.out.println("转换后添加的尾节点是:"+linkedList.toString()); } }
执行结果:
转换前:1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50, 转换后:50,49,48,47,46,45,44,43,42,41,40,39,38,37,36,35,34,33,32,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1, 转换后linkedList的尾节点是:Node [data=1, next=null] 转换后添加的尾节点是:50,49,48,47,46,45,44,43,42,41,40,39,38,37,36,35,34,33,32,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,-1,-2,-3,