剑指offer之链表中倒数第k个结点(Python)

来源:互联网 发布:淘宝网哪里写招聘 编辑:程序博客网 时间:2024/06/17 12:36

题目描述

输入一个链表,输出该链表中倒数第k个结点。


思路1:这题用Python并不难,主要是利用Python的append完成所有结点的保存。

代码如下:

注意:在function使用return返回list[-k]结点时,并不是返回结点的val,所以使用print函数打印时,本地编译器只是出现“<__main__.ListNode instance at 0x000000000605D108>”类似的输出。

思路2:将链表头赋给两个新指针P1和P2,让指针P1先走k步,然后两个指针同时走,等P1走完,此时P2所指向的结点即为倒数第k个结点。

# -*- coding: utf-8 -*-"""Created on Sun Oct 15 19:04:13 2017@author: gb_xiaoMail: mingliumengshao@163.com""""""题目描述:输入一个链表,输出该链表中倒数第k个结点。"""class ListNode():    def __init__(self, x):        self.val = x        self.next = None        def CreateList(n):    if n == 0:        return None    if n ==1:        return ListNode(1)    else:        listNode = ListNode(1)        tmp = listNode        for i in range(2,n+1):            tmp.next = ListNode(i)            tmp = tmp.next    return listNodedef function1(listNode,k):    lists=[]    while listNode:        lists.append(listNode)        listNode = listNode.next    if len(lists) < k or k<=0:        return     else:        return lists[-k]
def function2(listNode,k):    p1 = listNode    p2 = listNode    if k <= 0 or p1 == None:        return     i = 0    while i < k and p1 != None:        i += 1        p1 = p1.next        if p1 == None and k > i:            return     while p1 != None:        p1 = p1.next        p2 = p2.next    return p2 
def printlist(listNode):    tmp = listNode      while tmp:        print tmp.val        tmp = tmp.nextdef main():    listNode = CreateList(11)     print "已知链表为:"    printlist(listNode)    print "倒数第k个结点"    print function(listNode, 4)if __name__=="__main__":    main()