链表反转步骤分解附图leetcode 206题目迭代求解法

 

 

结合代码分析:

步骤一、current指向头节点,current_next指向current的下一个节点,current_previous指向空。

 

步骤二、current的指针域指向current_previous,更新current_previous和current.

步骤二 ①:current的指针域指设置为current_previous

 

步骤二 ②:更新current_previous和current,更新方法为:current_previous = current,current = current_next

 

步骤三、一次循环结束,到下一次循环,又回到步骤1,current_next = current的下一个节点

 

然后到步骤2:current的指针域指向current_previous,更新current_previous和current.

步骤二 ①:current的指针域指设置为current_previous

 

步骤二 ②:更新current_previous和current,更新方法为:current_previous = current,current = current_next

 

 

步骤四、又一次循环结束了,继续往下执行到步骤1:curren_next指向current的下一个节点

 

看代码,current_next == NULL 了,到达if判断,所以将current节点作为反转链表之后的头指针,此时reverse_head获取的current值指向节点C

然后继续执行步骤二:current的指针域指向current_previous,更新current_previous和current.

步骤二 ①:current的指针域指设置为current_previous

 

步骤二 ②:更新current_previous和current,更新方法为:current_previous = current,current = current_nex

 

 

达到while循环退出条件(current == NULL),搞定!(这里需要注意的是虽然current现在指向NULL,但是reverse_head获取的是更新current前那个current所指向的节点也即是节点C)

 

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

当然啦,看完这个分析过程,可以看到其实最后返回的是节点C的指针即可,所以可以将代码简化为直接返回current_previos即可。

代码如下:

#使用3个指针遍历单链表,逐个链接点进行反转

 

class ListNode(object):
     def __init__(self, x):
         self.val = x
         self.next = None
         
class Solution(object):
    def reverseList(self, head):
        current_previous = current = None
        if head:
            current_previous = head
            current = head.next
            current_previous.next = None
        else:
            return None
        while current:
            current_previous = current
            current = current.next
            current_previous.next = current_previous
            current_previous = current
        return current_previous

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值