輸入一個鏈表,反轉鏈表後,輸出新鏈表的表頭。java
public class RevnNode { public static class Node { public int value; public Node nextNode; public int getValue() { return value; } public void setValue(int value) { this.value = value; } public Node getNextNode() { return nextNode; } public void setNextNode(Node nextNode) { this.nextNode = nextNode; } public Node(int value) { this.value = value; } } /** * 反轉操做方法1 遞歸實現:從最後一個Node開始,在彈棧的過程當中將指針順序置換的。 * * @param head * @return */ public static Node reverse1(Node head) { if (head == null || head.nextNode == null) return head; Node temp = head.nextNode; Node newHead = reverse1(head.nextNode); temp.nextNode = head; head.nextNode = null; return newHead; } /** * 反轉操做方法2 :在鏈表遍歷的過程當中將指針順序置換 * @param node * @return */ public static Node reverse2(Node node) { Node pre = null; Node next = null; while (node != null) { next = node.nextNode; node.nextNode = pre; pre = node; node = next; } return pre; } public static void main(String[] args) { Node head = new Node(0); Node node1 = new Node(1); Node node2 = new Node(2); Node node3 = new Node(3); head.setNextNode(node1); node1.setNextNode(node2); node2.setNextNode(node3); // 打印反轉前的鏈表 Node h = head; while (null != h) { System.out.print(h.getValue() + " "); h = h.getNextNode(); } // 調用反轉方法1 System.out.println("\n*********** reverse1 ***************"); head = reverse1(head); // 打印反轉後的結果 while (null != head) { System.out.print(head.getValue() + " "); head = head.getNextNode(); } // 調用反轉方法2 System.out.println("\n*********** reverse2 ***************"); head = reverse2(head); // 打印反轉後的結果 while (null != head) { System.out.print(head.getValue() + " "); head = head.getNextNode(); } } }