leetcode [python] 【206】Reverse Linked List

1 設置兩個指針,記錄當前結點和上一結點:
# 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 head == None: 
            return head 
        p = head
        n = head.next
        p.next = None
        while n:
            t = n.next
            n.next = p
            p = n
            n = t
        return p
            

2 設置一箇中間結點,存儲每一步結點的上一個結點地址:

# 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
       
        """
        tmp = ListNode(0)
        while head:
            n = head.next
            head.next = tmp.next
            tmp.next = head
            head = n
        return head
如果用遞歸的方式:

# 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
        """
        return self.reverseNode(head, None)
    def  reverseNode(self, head, before):
        if head == None:
            return before
        n = head.next
        head.next = before
        return self.reverseNode(n, head)




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章