头插法反转链表

Posted alyiacon

tags:

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

过程分析:

  1. 原链表 1->2->3
  2. 新建new节点,指向1,1指向null,此时head更新2
  3. head(2)插入new之后,1之前,此时head更新为3
  4. head(3)插入new之后,2之前

规律总结:

通过newList保存当前节点,通过下一次操作把新的节点插入二者之间实现反转。


class Test4 {
    public static void main(String[] args) {
        ListNode head = new ListNode(1);
        head.next = new ListNode(2);
        head.next.next = new ListNode(3); // 1 -> 2 -> 3
        reverse(head);
    }

    public static ListNode reverse(ListNode head) {
        // core algorithm
        ListNode newList = new ListNode(-1);
        while (head != null) {
            ListNode next = head.next;
            head.next = newList.next;
            newList.next = head;
            head = next;

            // print the process
            ListNode print = newList;
            System.out.println("");
            while (null != print) {
                System.out.print(print.val + "->");
                print = print.next;
            }
            System.out.print("null");

        }
        return newList.next;
    }

    private static class ListNode {
        ListNode next = null;
        int val;

        ListNode(int val) {
            this.val = val;
        }
    }
}

输出结果:

技术图片

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

头插法反转链表

Leetcode25. K 个一组翻转链表(头插法反转)

Offer[24] 反转链表

单链表反转--头插法

同时创建两条单链表,头插法插入节点,遍历,查找,删除,求长度,冒泡排序,反转,2条有序链表链接成一条链表后依然有序

单向链表反转