反转链表

题目

反转一个单链表。

示例:

输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL

进阶:
你可以迭代或递归地反转链表。你能否用两种方法解决这道题?

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-linked-list
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路

递归

每一次递归实现局部反转,让当前结点的 next指针指向 NULL,当前结点的下一个结点的 next 指针指向当前结点。

双指针迭代

举例说明,输入链表为:1->2->3->NULL

有两个指针pre和cur,分别指向该结点的前一结点和该结点

通过遍历链表的当前结点,把每一结点的下一个结点作为当前结点,前一结点为该结点,以head为例:

// 此时 cur 指向结点 1 ,pre 指向 None
cur = head
cur.next = 2
pre = None

对于反转后的结果,需要3->2->1->NULL

// 当 cur 指向结点 1 ,pre 指向 2
cur = 1
cur.next = None
pre = 2

则要经过:cur.next 和 pre 指向的结点值互换,并且 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:
    // 若当前结点为空结点,此时 cur 是当前最后结点
		if(head==None or head.next==None):
			return head
			
		cur = self.reverseList(head.next)
		head.next.next = head
		head.next = None
		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:
        pre = None
        cur = head
        while cur:
            temp = cur.next 
            cur.next = pre
            // 进入下一次迭代
            pre = cur
            cur = temp
        return pre

学习总结

  1. 链表的数据结构在python中的表示;
  2. 数据结构类型的处理思想相通,可以根据java的实现方式写出python的代码思路。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值