单链表的反转

Posted hejunhong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单链表的反转相关的知识,希望对你有一定的参考价值。

public class LinklistReverse {
    //定义类节点类 封装节点信息

    static class Node {
        private int value;
        private Node next;

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

        public int getValue() {
            return value;
        }

        public void setValue(int value) {
            this.value = value;
        }

        public Node getNext() {
            return next;
        }

        public void setNext(Node next) {
            this.next = next;
        }
    }


    public static Node reverse3(Node head) {
        //当前节点  1
        Node cur = head;
        //当前节点的下一个节点  2
        Node post = head.next;
        //将当前节点的指向设置为空  1->null
        head.next = null;
        while (post != null) {
            //将下一个节点的值 给一个临时变量 2=tmp
            Node tmp = post;
            //将下一个的下一个值给 下个值  3->2
            post = post.next;
            //临时节点的再赋值 将1 赋给他的next节点 1=tmp.next
            tmp.next = cur;
            //tmp现在是 2->1
            cur = tmp;
        }
        return cur;
    }

    //1->2->3->4->5     1<-2<-3<-4<-5
    public static Node reverse(Node node) {
//        //如果进来的节点是第一个或者最后一个
//        Node current=node;
//        Node next=node.getNext();
//       while (next!=null){
//           Node tmp=next;
//           next=next.getNext();
//           tmp
//       }
//    }
        return null;
    }


//    public void reverse4(Node node) {
//        ///记录current的节点是head大的下一个节点。
//        Entry<T> current = head.next;
//
//        //切断head.next指向current,(当前的head变为链表的尾,所以next为空)
//        head.next = null;
//        while(current != null) {
//            //记录currentNext的节点是currentNext大的下一个节点。
//            Entry<T> currentNext = current.next;
//            //current.next反方向指向以前的节点
//            current.next = head;
//            //移动head和current指针,到后面head重新成为头节点
//            head = current;
//            current = currentNext;
//        }
//    }

    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.setNext(node1);
        node1.setNext(node2);
        node2.setNext(node3);
        Node h = head;
        while (h != null) {
            System.out.println(h.getValue() + " ");
            h = h.getNext();
        }
     head=   reverse3(head);
        System.out.println("===========");
        while (head != null) {
            System.out.println(head.getValue() + " ");
            head = head.getNext();
        }
    }
}

 

以上是关于单链表的反转的主要内容,如果未能解决你的问题,请参考以下文章

单链表逆置

[每日算法220508] 单链表和双链表的反转

Go 反转链表单链表的添加和显示单链表的添加和显示控制反转

Go 反转链表单链表的添加和显示单链表的添加和显示控制反转

[每日算法220508] 单链表和双链表的反转

[每日算法220508] 单链表和双链表的反转