码迷,mamicode.com
首页 > 编程语言 > 详细

链表的翻转(java)

时间:2019-08-14 12:19:38      阅读:95      评论:0      收藏:0      [点我收藏+]

标签:两种方法   ext   return   eve   两种   ret   第一个   nbsp   turn   

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

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)

标签:两种方法   ext   return   eve   两种   ret   第一个   nbsp   turn   

原文地址:https://www.cnblogs.com/stupid-chan/p/11351072.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!