Question:
Reverse a singly linked list.(单链表反转)
Answer:(42ms)
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution(object):
def reverseList(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
b = None
while head:
a = head
head = head.next
a.next = b
b = a
return b
思路(假设单链表有3个元素以上):
1. 循环开始,a指向head,即指向第一个元素,head指向下一个元素(第二个),a的下一个元素指向b,初始时b为None,最后让b指向a,b指向第一个元素;
2. 第二次循环,a指向head,由于第一次循环,head指向了下一个元素(第二个),故a指向第二个元素,head指向下一个元素(第三个),a的下一个元素指向b,由于第一次循环,b指向第一个元素,故a的下一个元素指向第一个元素,综合,最后让b指向a,b指向第二个元素;此时可以看到,b实际上已经是一个小反转链表,b的值是第二个元素,b.next是第一个元素,(b.next).next是None。
3. 继续循环;
4. 循环最后在head为None时退出。