链表 reverse
方式一,操作子节点
将子节点的next指向当前节点。这种处理需要对第一个节点做单独处理
方式二,操作当前节点
将当前节点指向他的parent节点,第一个节点无parent,用null表示,所有节点操作同一
测试代码
package java05.linklist; import lombok.Data; import lombok.extern.slf4j.Slf4j; @Slf4j public class ReverseLinkList { public static void main(String[] args) { Node<Integer> head = new Node<>(1), t = head; for (int i = 1; i < 10; i++) { t.setNext(new Node<>(i + t.getData())); t = t.getNext(); } println(head); println(head = reverse(head)); println(reverse2(head)); } static void println(Node head) { log.info("-------------------------------------------------------"); while (head != null) { log.info("{}", head); head = head.getNext(); } } static Node reverse(Node head) { if (head == null || head.getNext() == null) { return head; } Node current = head, next = current.getNext(), temp = null; while (next != null) { temp = next.getNext(); next.setNext(current); current = next; next = temp; } head.setNext(null); return current; } static Node reverse2(Node head) { if (head == null || head.getNext() == null) { return head; } Node current = head, parent = null, temp = null; while (current != null) { temp = current.getNext(); current.setNext(parent); parent = current; current = temp; } return parent; } } @Data class Node<T> { private T data; private Node<T> next; public Node(T data) { this.data = data; } @Override public String toString() { return "Node{" + "data=" + data + '}'; } }