2016 - 2024

感恩一路有你

c语言单向链表反转递归 如何使用递归和非递归方式反转单向链表?

浏览量:1714 时间:2021-03-15 17:14:29 作者:admin

如何使用递归和非递归方式反转单向链表?

问题:给一个单向链表,把它从头到尾反转过来。比如: a - b - c -d 反过来就是 d - c - b - a 。分析:假设每一个node的结构是:复制代码代码如下:class Node {char valueNode next}因为在对链表进行反转的时候,需要更新每一个node的“next”值,但是,在更新 next 的值前,我们需要保存 next 的值,否则我们无法继续。所以,我们需要两个指针分别指向前一个节点和后一个节点,每次做完当前节点“next”值更新后,把两个节点往下移,直到到达最后节点。代码如下:复制代码代码如下:public Node reverse(Node current) {//initializationNode previousNode = nullNode nextNode = nullwhile (current != null) {//save the next nodenextNode = current.next//update the value of "next"current.next = previousNode//shift the pointerspreviousNode = currentcurrent = nextNode}return previousNode}上面代码使用的是非递归方式,这个问题也可以通过递归的方式解决。代码如下:复制代码代码如下:public Node reverse(Node current){if (current == null || current.next == null) return currentNode nextNode = current.nextcurrent.next = nullNode reverseRest = reverse(nextNode)return reverseRest}递归的方法其实是非常巧的,它利用递归走到链表的末端,然后再更新每一个node的next 值 (代码倒数第二句)。

Java语言写出实现将单向链表顺序反转的函数?

假设链表的节点定义如下:class Node{int iNode next}那么其反转函数为: void reverse(Node l){if(l==null) returnNode p=null,q=l,r=l.nextwhile(r!=null){q.next=pp=qq=rr=r.next}q.next=pl=q}

c语言单向链表反转递归 java单链表反转递归 java递归实现单链表反转

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。