鏈表分爲單鏈表、雙鏈表,此次討論單鏈表的情況。之前有思考鏈表如何逆轉,直到看了HashMap 1.7的resize操作,才發現原來逆轉有這樣簡潔的寫法(1.8雖然沒有逆轉,但實現也很經典,感興趣可以自己研究)。特此記錄分享下:
要實現的效果如下:
package com.syj.test.linkedtest; import lombok.Data; /** * Created by syj on 2018/2/8. */ @Data public class Node { private String val; private Node next; Node(){} Node(String val) { this.val = val; } Node(String val, Node next) { this.val = val; this.next = next; } }
package com.syj.test.linkedtest; /** * Created by syj on 2018/2/8. */ public class LinkReverse { public static void main(String[] args) { Node node1 = new Node("node1"); Node node2 = new Node("node2"); Node node3 = new Node("node3"); Node node4 = new Node("node4"); node1.setNext(node2); node2.setNext(node3); node3.setNext(node4); System.out.println("before:" + node1); Node reverseNode = reverse(node1); System.out.println("after:" + reverseNode); } private static Node reverse(Node node) { Node head = null; Node next = null; do { next = node.getNext(); //將當前元素的下一個元素,指向當前鏈表的頭部 node.setNext(head); //將頭部指向當前元素 head = node; } while ((node = next) != null); return head; } }