Reverse a singly linked list.
# 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 not head: return None pre_node = head next_node = head.next pre_node.next = None while next_node: tmp = next_node.next next_node.next = pre_node pre_node = next_node next_node = tmp return pre_node
精简下代码:
# 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 not head: return None pre_node = None cur_node = head while cur_node: tmp = cur_node.next cur_node.next = pre_node pre_node = cur_node cur_node = tmp return pre_node
递归解:
# 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 """ def reverse_node(pre_node, cur_node): if not cur_node: return pre_node next_node = cur_node.next cur_node.next = pre_node return reverse_node(cur_node, next_node) if not head: return None new_head = reverse_node(head, head.next) head.next = None return new_head
dfs
# 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 not head or not head.next: return head node = self.reverseList(head.next) head.next.next = head head.next = None return node
记得程序员面试金典里专门提过!