本内容为牛客网,剑指offer题目:反转链表
# -*- coding: utf-8 -*- """ Created on Wed Mar 13 13:33:31 2019 @author: Administrator 输入一个链表,反转链表后,输出新链表的表头 用三个地址保存该节点的前后节点地址 """ # -*- coding:utf-8 -*- class ListNode: def __init__(self, x): self.val = x self.next = None class Solution: # 返回ListNode def ReverseList(self, pHead): # write code here if pHead == None: #首先判断该链表是否为空 return None else: # i = pHead j = pHead.next if j == None: #如果传入的链表是不空的,判断链表是否只有一个元素 return i #如果只有一个就直接返回这一个元素即可 i.next = None #先将第一个元素的的子节点赋空 while True: if j.next: #判断后节点是否为空,不为空说明没有到尾节点 temp = j.next #将该节点的子节点保存起来 j.next = i #续链,串联前面的节点 i = j #保存该节点的地址 j = temp #地址后移到下一个 else: #如果是最后一个节点了就直接将前面的节点串接起来即可 j.next = i break return j def print_listNode(self,pHead): while pHead: print(pHead.val) pHead = pHead.next if __name__ == '__main__': #test1 为空的链表 #n_empty = ListNode() #test2 只有一个节点的链表 n_one = ListNode(1) #正常的大于2的链表 n1 = ListNode(1) n2 = ListNode(2) n3 = ListNode(3) n4 = ListNode(4) n5 = ListNode(5) n4.next = n5 n3.next = n4 n2.next = n3 n1.next = n2 solution = Solution() print('---------------正序的链表------------') solution.print_listNode(n1) print('---------------倒置的链表------------') result = solution.ReverseList(n1) solution.print_listNode(result)