思路:
- 三指针,每次枚举相邻两个点,改变一条边的方向
步骤:
原链表为:从左到右指 1-2-3-4-5-空
# 三个指针a,b,c 初始a指向1,b指向2,c指向3
三板斧
1、c = b.next # 其实就是先保留当前这一对结尾的节点的指向节点
2、b.next = a # 然后将这一对结尾节点的指向更新为向前指
3、a = b, b = c # 让a,b各后移动一位
收尾
最后当b移动到空节点,则a就是原链表的尾节点,
此时将a就是新链表的头节点,将原头节点的下一个指向空节点,然后返回a就行啦
# 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:
if not head:
return None
a = head; b = head.next
while b:
c = b.next
b.next = a
a, b = b, c
head.next = None
return a