反转一个单链表。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
class Solution(object):
def reverseList(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
#设立指针
pointer = head
new_head = None
#这里用到了python的多元赋值特性 x,y = y,x
while pointer:
new_head, new_head.next, pointer = pointer, new_head, pointer.next
#指针指向None退出循环
return new_head
注意python的多元赋值特性,譬如:
a, b = 1, 2
a, b = b, a + b
#result: a =2, b =3
用1->2->3->NULL举例:
第一轮:
new_head
--> 初始设立的pointer,也就是head --> new_head:1(->2->3->NULL)
new_head.next
--> 给new_head:1(->2->3->NULL)换链子,挂上它的初始值None
此时new_head
变更为1(->NULL)
pointer
--> 原链表的下一个节点 --> 2(->3->NULL)
第二轮:
new_head
--> 第一轮的pointer --> new_head:2(->3->NULL)
new_head.next
–> 给new_head:2(->3->NULL)换链子,挂上第一轮的new_head:1(->NULL)
此时new_head
变更为2(->1->NULL)
pointer
--> 原链表的下一个节点 --> 3(->NULL)
第三轮:
new_head
--> 第二轮的pointer --> new_head:3(->NULL)
new_head.next
--> 给new_head:3(->NULL)换链子,挂上第二轮的new_head:2(->1->NULL)
此时new_head
变更为3(->2->1->NULL)
pointer
--> 原链表的下一个节点 --> NULL
第四轮:
while pointer为False,退出循环
返回 new_head:3->2->1->NULL