反转一个单链表。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
之前应该做过,所以思路大体是清楚的:链表要进行反转,那么当前节点的下一个节点就要指向前一个节点,因此我们至少需要两个指针:last表示当前节点的前一个节点,cur表示当前节点;而cur.next的值指向last时,cur的下一个节点与cur的联系就断了,因此我们还需要一个临时节点tem存放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:
last = None
cur = head
tem = head
while tem != None:
tem = cur.next # 临时节点
cur.next = last
last = cur
cur = tem
return last
直到我看到了评论区大佬gaussic的代码:
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def reverseList(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
p, rev = head, None
while p:
rev, rev.next, p = p, rev, p.next
return rev
完全不需要tem临时节点!!巧妙地利用了python多元赋值。多元赋值的时候,右边的值不会随着赋值而改变。妙啊~