反转一个单链表。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
进阶:
你可以迭代或递归地反转链表。你能否用两种方法解决这道题?
方法 1/2
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def reverseList(self, head,prev = None):
"""
:type head: ListNode
:rtype: ListNode
"""
#使用递归,执行效率没有下边的办法快
# curr = head
# if not head:
# return prev
# curr,head.next = head.next,prev
# return self.reverseList(curr,head)
if head is None:
return None
cur = head
pre = None
nxt = cur.next
while nxt:
cur.next = pre
pre = cur
cur = nxt
nxt = nxt.next
cur.next = pre
head = cur
return head
方法3
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def reverseList(self, head,prev = None):
"""
:type head: ListNode
:rtype: ListNode
"""
res = []
if not head:
return None
while head:
res.append(head.val)
head = head.next
for i in range(int(len(res) / 2)):
res[i],res[len(res) - i -1] = res[len(res) - i -1],res[i]
return res