剑指offer 反转链表

本内容为牛客网,剑指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)

 

上一篇:剑指Offer的学习笔记(C#篇)-- 反转链表


下一篇:【剑指Offer】55、链表中环的入口结点