题解 | #输出单向链表中倒数第k个结点#

输出单向链表中倒数第k个结点

http://www.nowcoder.com/practice/54404a78aec1435a81150f15f899417d

# 定义一个结点类:有两个参数,self.data存放自定义的数据,self.next存放下一个结点对象的地址
class Node(object):
    def __init__(self, data):

        #以self为前缀的变量可以供类中的所有方法使用

        # 形参data保存传递的数据
        self.data = data
        # next保存下一个结点对象
        self.next = None


# 定义一个链表类
class LinkList(object):
    # 头head
    def __init__(self, node=None):
        self.head = node

    # 判断链表是否是空的
    def is_empty(self):
        if self.head is None:
            return True
        else:
            return False

    # 链表尾部添加对象,首先一定得判断一下链表是否是空的
    def append(self, item):
        # 最开始需要创建一个结点对象,通过这个结点类创建这个结点对象
        node = Node(item)

        # 首先你得判断一下链表是否是空的
        # 如果链表是空的,
        if self.is_empty():
            # 那你得把结点给head, 所以在之前你就得创建一个结点
            self.head = node
        else:
            # 引入cur变量,相当于一个游标

            # self.head存放的是头结点对象的地址,将self.head赋值给cur,相当于此时cur就是指向头结点
            cur = self.head

            # cur.next指的是下一个结点对象
            while cur.next is not None:
                cur = cur.next

            cur.next = node

    # 定义输出打印第num个结点的方法
    def print_node(self, num):
        # 让游标指向头结点
        cur = self.head
        # 注意此时游标cur指向的是第一个结点对象,所以打印第num个结点对象,只需要游标向后移动num-1下;
        for i in range(0, num - 1):
            cur = cur.next
        # 只打印游标对象存储的数据
        print(cur.data)


if __name__ == '__main__':
    while True:
        try:
            # 输入链表结点个数n
            n = int(input())
            # 输入链表的值,并利用split方法将字符串分割,返回一个列表
            list1 = input().split()
            # 输入k的值
            k = int(input())
            
            # 注意:这里题目要求,倒数第0个结点的值为0
            if k == 0:
                print(0)

            else:
                # 创建一个链表对象
                link_list = LinkList()
                
                # 遍历列表中的元素
                for i in list1:
                    # 调用链表对象link_list中的append方法给链表添加对象
                    link_list.append(i)

                link_list.print_node(n - k + 1)
        except:
            break


全部评论
这一个我终于看懂了
点赞 回复 分享
发布于 2022-05-11 08:51
难理解
点赞 回复 分享
发布于 2022-11-02 10:54 陕西
这个答案有问题,题目说了构建完后忘记链表长度,故n是无法使用的
点赞 回复 分享
发布于 11-08 16:24 上海

相关推荐

10-16 22:56
门头沟学院 C++
1234567800:歌尔今年给211开14-15k吗,我本地人连面试都不给😂
点赞 评论 收藏
分享
评论
18
10
分享
牛客网
牛客企业服务