加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

链表的翻转(java)

发布时间:2020-12-15 08:23:19 所属栏目:Java 来源:网络整理
导读:翻转的两种方法:非递归与递归。 1、非递归方法 public ListNode reverse(ListNode node) { Node prev = null; while (node != null) { //每次新建一个链表,用来读取每次循环操作的一个节点 ListNode tmp = node; //将传入的链表指向下一个节点,下次循环将

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

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;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读