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

题目描述

输入一个链表,输出该链表中倒数第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_xiao
Mail: 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 listNode

def 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.next
def main():
    listNode = CreateList(11) 
    print "已知链表为:"
    printlist(listNode)
    print "倒数第k个结点"
    print function(listNode, 4)
if __name__=="__main__":
    main()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值