双指针法
版本1:不能这样。虽然使temp指向了new的一个新的对象(称为a),但是,当temp=cur时,temp便指向了cur,new的那个对象a便被遗弃了,没有东西指向它。 要注意 引用传递 !
class Solution(object):
def reverseList(self, head):
pre = None
cur = head
temp = ListNode(0, None)
while cur.next:
temp = cur # 这里有问题
cur.next = pre
cur = temp.next
pre = temp
return cur
版本2:注意结尾条件。
class Solution(object):
def reverseList(self, head):
pre = None
cur = head
# temp = ListNode(0, None) 不要这个
while cur:
temp = cur.next
cur.next = pre
pre = cur
cur = temp
return pre
递归法
版本1:从后往前。先写 循环终止条件 ,再从后往前 一层层地剥开 ,直到 最后一项 了再进行 操作 。
class Solution(object):
def reverseList(self, head):
if head == None:
return None
if head.next == None:
return head
last = self.reverseList(head.next) # 先进递归,直到最后一项了再进行操作
head.next.next = head
head.next = None
return last
版本2:从前往后。思想类似双指针。
class Solution(object):
def reverseList(self, head):
return self.recursion2(None, head)
def recursion2(self, pre, cur):
if cur == None:
return pre
after = cur.next
cur.next = pre
return self.recursion2(cur, after)