1. 反转一个单向链表
题目:反转一个单链表
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
解题:
用递归反转的方法来反转一个单链表
核心代码:
def reverse(self, head):
if head.next == None: return head
last = self.reverse(head.next)
head.next.next = head
head.next = None
return last
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
class SingleLinkList:
def __init__(self, node=None):
self.__head = node
def is_empty(self):
"""链表是否为空"""
return self.__head == None
def find_head(self):
return self.__head
def append(self, item):
node = ListNode(item)
if self.is_empty():
self.__head = node
else:
cur = self.__head
while cur.next != None:
cur = cur.next
cur.next = node
class Solution:
def reverse(self, head):
if head.next == None: return head
last = self.reverse(head.next)
head.next.next = head
head.next = None
return last
if __name__ == "__main__":
ll = SingleLinkList()
ll.append(1)
ll.append(2)
ll.append(3)
ll.append(4)
ll.append(5)
ll.append(6)
solution = Solution()
result = solution.reverse(ll.find_head())
while result.next != None:
print(result.val)
result = result.next
print(result.val)
结果:
6
5
4
3
2
1