链表 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 +
                '}';
    }
}

  

posted @ 2021-03-15 22:40  noidler  阅读(40)  评论(0编辑  收藏  举报