链表的翻转(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)的主要内容,如果未能解决你的问题,请参考以下文章