leetcode206 Reverse Linked List
1 """ 2 Reverse a singly linked list. 3 Example: 4 Input: 1->2->3->4->5->NULL 5 Output: 5->4->3->2->1->NULL 6 """ 7 8 """ 9 两种解法 10 解法一:迭代法 11 是先申请一个pre = None 作为尾结点 12 cur = head 作为当前结点,end = cur.next用来存储下一个需要更新的cur的位置 13 让当前的cur结点与pre相连cur.next = pre,并更新pre = cur, cur = end 14 返回pre 15 """ 16 17 class ListNode: 18 def __init__(self, x): 19 self.val = x 20 self.next = None 21 22 class Solution1: 23 def reverseList(self, head): 24 pre = None 25 cur = head 26 while cur: 27 end = cur.next 28 cur.next = pre 29 pre = cur 30 cur = end 31 return pre 32 33 """ 34 解法二:递归 35 递归的思想:如果要倒转的链表有n个节点, 36 那么如果第一个节点后面的n-1个节点已经正确倒转了的话, 37 只要处理第一个和第二个节点的指向关系就可以了。 38 要使后面n-1个节点正确倒转,那么闲要使得后面的n-2个节点正确倒转。于是接这么递归下去。 39 最后只剩一个节点的时候,就什么都不用做了,只需要改变其与原来的上一个节点之间的关系就可以了。 40 """ 41 class Solution2: 42 def reverse(self, head): 43 if head.next == None: 44 return head 45 p = self.reverse(head.next) 46 head.next.next = head 47 head.next = None 48 return p