结合代码分析:
步骤一、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