链表练习 --- 反转链表

eg: 将原链表 0 -> 1 -> 2 -> 3 -> 4 反转成为 4 -> 3 -> 2 -> 1 -> 0


/**
 * @ClassName: ReverseLinklist
 * @Description: TODO
 * @Author: xiaomi.mzt@qq.com
 * @Date: 2021/3/2 19:37
 */
public class ReverseLinklist {

    public static void main(String[] args) {
        Node node = new Node("0");
        Node node1 = new Node("1");
        Node node2 = new Node("2");
        Node node3 = new Node("3");
        Node node4 = new Node("4");
        node.next = node1;
        node1.next = node2;
        node2.next = node3;
        node3.next = node4;

        System.out.println("----------打印原链表:");
        System.out.println(node);
        Node head = reverse(node);
        System.out.println("----------反转链表后:");
        System.out.println(head);

    }

    private static Node reverse(Node head) {
        //新建一个指针指向头节点
        Node p = head;
        //用来保存新的next结点
        Node newNext = null;

        while (p != null) {
            //先保存当前结点
            Node node = p.next;
            //更新next结点,设为newNext
            p.next = newNext;
            //下一个结点的next值就是当前p指向的结点
            newNext = p;
            //p指向原链表当前结点的下一个结点
            p = node;
        }
        //最后newNext指向原链表最后一个结点,也就是反转链表的第一个结点
        return newNext;
    }

}


class Node {

    String value;
    Node next;

    public Node(String value) {
        this.value = value;
        this.next = null;
    }

    @Override
    public String toString() {
        return "{" +
                "value='" + value + '\'' +
                ", next=" + next +
                '}';
    }
}



输出

----------打印原链表:
{value='0', next={value='1', next={value='2', next={value='3', next={value='4', next=null}}}}}
----------反转链表后:
{value='4', next={value='3', next={value='2', next={value='1', next={value='0', next=null}}}}}

Process finished with exit code 0
posted @ 2021-03-02 20:32  海绵698  阅读(31)  评论(0)    收藏  举报