题目:给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
思路:如果不断向一个链表首端插入结点,最早放进去的结点将在表的最后(即尾结点),而从表的首端取下结点,最后取下的是尾结点。也就是说,从一个表的首端不断取下结点,将其加入到另一个结点的首端,就形成了一个反转的过程。取下和加入的操作都是O(1)的,总的时间开销是O(n),所以这是一个高效的反转算法。
下面是Python代码:
class Solution(object):
def reverseList(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
cur = head
pre = None
while cur:
pre ,cur.next,cur = cur,pre,cur.next
# pre = cur 是指将链表的首结点取下
# cur.next = pre 是指在首端插入取下的结点
# cur = cur.next 是指不断移动结点
# while cur 是指依次将链表中的结点取完
return pre