数据结构与算法-链表逆序

package com.lxd.leetcode.demo.linked;

/**
 * @ClassName LinkedReversed
 * @Description: 单项链表逆序
 * @Author xiaod
 * @Date 2020/6/21
 * @Version V1.0
 **/
public class LinkedReversed {

    static class LinkNode{

        private int value;
        private LinkNode next;

        public LinkNode(int value){
            this.value = value;
        }
    }

    /****
     * 链表逆序
     *  1、校验链表是否可逆序
     *  2、定义哨兵节点为null
     *  3、定义指针指向头结点
     *  4、循环链表操作
     */
    public static LinkNode reverseLink(LinkNode head){
       if(head==null||head.next==null){
           return head;
       }
       //新的节点头结点为null(哨兵节点)
       LinkNode newNode = null;
       //当前节点
       LinkNode current = head;
       while (current!=null){
           //当前节点的下一个节点临时存储
           LinkNode temp =current.next;
           //当前节点的下一个节点指向哨兵节点
           current.next = newNode;
           //newNode指向当前节点,
           newNode = current;
           ///当前节点移动一步
           current = temp;
       }
       return newNode;


    }

    public static void main(String[] args) {
        // 测试
        LinkNode node1 = new LinkNode(1);
        LinkNode node2 = new LinkNode(2);
        LinkNode node3 = new LinkNode(3);
        node1.next = node2;
        node2.next = node3;
        LinkNode head = reverseLink(node1);
        System.out.println(head.value+" "+head.next.value+" "+head.next.next.value);
    }

}

你可能感兴趣的:(算法与数据结构)