您的位置:首页 > 编程语言 > Python开发

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

2017-10-15 19:32 651 查看


题目描述

输入一个链表,输出该链表中倒数第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()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息