使用三个指针,第一个指针指向原始链表的前驱结点,一个指针指向当前节点,一个指针指向原始链表的后继节点。在反转链表中,让当前节点指向前驱结点。然后为了防止找不到原始链表中剩余的节点,所以保存了yu原始链表的后继节点。当当前节点更新了自己的next节点之后,这三个指针依次往后移。知道指向原始链表的后继节点为空时,整个链表遍历完成,得到反转链表,当前节点指向的是反转链表的头节点。
# 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
"""
if head is None or head.next is None:
return head
p = head
q = head.next
r = head.next.next
p.next = None
while r:
q.next = p
p = q
q = r
r = r.next
q.next = p
return q