最近很多面试的同学被问到单链表反转这个算法题,参考http://www.tuicool.com/articles/VRvMvaz
# 定义链表的节点结构 class ListNode: def __init__(self, x): self.val = x self.next = None # 循环的方法反转链表,时间复杂度O(n) def cycle_reverse(head): # 单链表为空或者只有一个节点时,直接返回 if head is None or head.next is None: return head new_h = head # 用new_h来记录新链表的头结点 cur = head # 用cur来记录当前节点 pre = None # 用pre来记录当前节点的前一个节点 while cur: new_h = cur # 1.当前节点作为新链表的头结点 tmp = cur.next # 2.记录当前节点的下一个节点 cur.next = pre # 3.将当前节点从原链表中解链,并将其前一个节点作为新链表中它的下一个节点 pre = cur # 4.当前节点变成pre cur = tmp # 4.当前节点的下一个节点变成当前节点 return new_h # 构建单链表1->2->3->None node1 = ListNode(1) node2 = ListNode(2) node3 = ListNode(3) node1.next = node2 node2.next = node3 node3.next = None new_list = cycle_reverse(node1) while new_list: print new_list.val new_list = new_list.next