本文主要向您展示“LeetCode如何反转链表”。内容简单易懂,条理清晰。希望能帮你解开疑惑。让边肖带领大家学习《LeetCode如何反转链表》这篇文章。
题目描述
反转单个链表。
00-1010输入: 1-2-3-4-5-空
输出: 5-4-3-2-1-空
示例:
链表一般用迭代或递归求解,一般用双指针和三指针构造,如倒链表或DP动态规划。
解题思路
我们可以申请两点。第一个指针称为pre,它最初指向null。
第二个指针cur指向head,然后遍历cur。
每次迭代cur时,将cur的下一个指向pre,然后pre和cur前进一个位置。
所有迭代都结束了(cur变为null),pre是最后一个节点。
java实现
类别解决方案{
public listnode reverselist(listnode head){ 0
//应用程序节点,pre和cur,pre指向null。
ListNodepre=null
ListNodecur=head
ListNodetmp=null
while(cur!=null){ 0
//记录当前节点的下一个节点
tmp=cur.next
//然后将当前节点指向pre
cur.next=pre
//pre和cur节点都前进一位。
pre=cur
cur=tmp
}
returnpre
}
}
Python实现
类别解决方案(对象):
defreverseList(自我,头部):
if nothead or othead . next :
返回头
l=头部
r=head.next
剩余=r.next
下一个=无
whiler:
r.next=l
l=r
r=
nbsp;remain
if remain:
remain = remain.next
return l
递归实现:
递归的两个条件:
-
终止条件是当前节点或者下一个节点==null -
在函数内部,改变节点的指向,也就是 head 的下一个节点指向 head 递归函数那句
head.next.next = head
很不好理解,其实就是 head 的下一个节点指向head。
递归函数中每次返回的 cur 其实只最后一个节点,在递归函数内部,改变的是当前节点的指向。
class Solution {
public ListNode reverseList(ListNode head) {
//递归终止条件是当前为空,或者下一个节点为空
if(head==null || head.next==null) {
return head;
}
//这里的cur就是最后一个节点
ListNode cur = reverseList(head.next);
//如果链表是 1->2->3->4->5,那么此时的cur就是5
//而head是4,head的下一个是5,下下一个是空
//所以head.next.next 就是5->4
head.next.next = head;
//防止链表循环,需要将head.next设置为空
head.next = null;
//每层递归函数都返回cur,也就是最后一个节点
return cur;
}
}
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def reverseList(self, head: ListNode) -> ListNode:
if not head or head.next == None: return head
res = self.reverseList(head.next)
head.next.next = head
head.next = None
return res
以上是“LeetCode怎样反转链表”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/147020.html