链表的翻转(java)

Posted stupid-chan

tags:

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

翻转的两种方法:非递归与递归。

1、非递归方法

public ListNode reverse(ListNode node) 
            Node prev = null;
            while (node != null) 
                //每次新建一个链表,用来读取每次循环操作的一个节点
                ListNode tmp = node;
                //将传入的链表指向下一个节点,下次循环将下一个节点重新赋给tmp
                node = node.next;
                //将取出的节点的下一个节点置为上次操作后已完成翻转的部分节点
                tmp.next = prev;
                //将新的完成翻转部分的节点重新赋给待输出的链表
                prev = tmp;
            
            //输出已完成翻转的链表
            return prev;
  
        

 

2、递归方法

public Node reverse(ListNode node) 
            ListNode prev = null;
             //递归判断条件,当链表为空或只有一个节点时,跳出递归
            if (node == null || node.next == null) 
                prev = node; 
             else 
                //完成原链表完成从第二个节点到最后一个节点间的翻转
                ListNode tmp = reverse(node.next);
                //原链表第二个节点指向第一个节点
                node.next.next = node;
                //原链表第一个节点指向空,完成链表翻转
                node.next = null;
                prev = tmp;
            
            return prev;

  

  

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

LeetCode Java刷题笔记—25. K 个一组翻转链表

k个一组翻转链表(java实现)

Java 求解K 个一组翻转链表

数据结构69:链表逆置,链表反转,链表翻转

翻转链表

单向链表的构建以及翻转算法_图文详解