题解 | #反转链表#

Java中迭代反转链表问题

/**
 * 03 Java中迭代反转链表问题
 * 问题:将单链表的顺序反转
 * 样例:1 -> 2 -> 3   反转为:3 -> 2 -> 1
 *
 * 分析:
 * 1(next节点指向2)、2(next节点指向3)、3(next节点指向null)
 * 要改变各自的next节点指向:
 * 1(next节点指向null)、2(next节点指向1)、3(next节点指向2)
 *
 * 解法:迭代法
 * 步骤:
 * 1、传入一个节点,标识为当前节点:current
 * 2、保存当前节点的下一个节点,在一个临时节点变量中:next
 * 3、设置当前节点的下一个节点,指向一个前节点变量:previous
 * 4、将当前current节点放入变量节点previous中
 * 5、将next节点变为current节点,依次遍历,当current为空时,返回previous节点,即"头结点"
 */
public class Demo03 {
    public static void main(String[] args) {
        //1 -> 2 -> 3 -> null
        ListNode node3 = new ListNode(3, null);
        ListNode node2 = new ListNode(2, node3);
        ListNode node1 = new ListNode(1, node2);

        System.out.println(node1);
        /**
         * 输出结果:
         * ListNode{
         *      value=1, next=ListNode{
         *          value=2, next=ListNode{
         *              value=3, next=null
         *          }
         *      }
         * }
         */

        // 3 -> 2 -> 1 -> null
        ListNode previous = reverseNode(node1);
        System.out.println(previous);
        /**
         * 输出结果:
         *ListNode{
         *      value=3, next=ListNode{
         *          value=2, next=ListNode{
         *              value=1, next=null
         *          }
         *      }
         * }
         */
    }

    //迭代方式
    private static ListNode reverseNode(ListNode head) {
        ListNode previous = null;//相对于下一个节点来说是前一个节点(将当前节点保存在此变量中)
        ListNode next;//相对于当前节点来说是后一个节点(将当前节点的下一个节点保存在此变量中)
        ListNode current = head;//当前节点

        while (current != null) {
            next = current.getNext();//将当前节点的下一个节点,保存在next临时节点中
            current.setNext(previous);//扭转当前节点的指向,设置指向的下一个节点,指向前一个节点
            previous = current;//相对于下一个节点来说是前一个节点(将当前节点保存在previous变量中)
            current = next;//将下一个节点,作为"当前节点"依次向下遍历
        }
        return previous;//返回最后一个节点,即"头"节点
    }
}

程序员地瓜的算法题解 文章被收录于专栏

算法题解

全部评论

相关推荐

评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务