借用栈
class Solution:
# 返回ListNode
def ReverseList(self, pHead):
# write code here
array = []
while pHead:
array.append(pHead.val)
pHead=pHead.next
node = ListNode(0)
x = node
while array:
x.next = ListNode(array.pop())
x = x.next
return node.next
双指针
还是使用一个虚拟头节点作为前驱pre
用一个临时节点tmp记录当前节点的下一个节点
然后开始反转当前节点.next = 前驱节点
前驱节点 = 当前节点
当前节点 = 下一个节点
# self.val = x
# self.next = None
class Solution:
# 返回ListNode
def ReverseList(self, pHead):
# write code here
if not pHead:
return None
pre = None
while pHead:
temp = pHead.next
pHead.next = pre #反转
pre = pHead
pHead = temp
return cur
递归
def reverseList(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
if not head or not head.next:
return head
cur = self.reverseList(head.next) #这里是用来记录末尾节点
head.next.next = head #反转主要靠这里
head.next = None #断开不能成环
return cur #末尾节点一直记住