HJ51 输出单向链表中倒数第k个结点 【python3】

该文章描述了一个编程问题,涉及输入一个单向链表,要求输出倒数第k个节点。解决方案是先遍历链表计算长度,然后再次遍历找到正数的n-k+1个节点。代码使用Python实现,包括链表节点结构、链表构建和查找功能。

题目描述

输入一个单向链表,输出该链表中倒数第k个结点,链表的倒数第1个结点为链表的尾指针。
链表结点定义如下:

struct ListNode
{
    int m_nKey;
    ListNode* m_pNext;
};

正常返回倒数第k个结点指针,异常返回空指针.
要求:
(1)正序构建链表;
(2)构建后要忘记链表长度。
数据范围:链表长度满足 1≤n≤10001 \le n \le 10001n1000k≤nk \le nkn ,链表中数据满足 0≤val≤100000 \le val \le 100000val10000

本题有多组样例输入。

输入描述

输入说明
1 输入链表结点个数
2 输入链表的值
3 输入k的值

输出描述

输出一个整数

代码

重点在于题目要求我们在找倒数第k个结点,即正数第n-k+1个结点的时候忘记列表的长度,因此在函数中还需遍历单链表算一次链表的长度。

class ListNode:
    def __init__(self, val: int):
        self.val = val
        self.next = None

# 根据存储结点值的列表构造单链表
def create_list(head:ListNode,value_list):
    cur=head
    for value in value_list:
        cur.next=ListNode(value)
        cur=cur.next
    return head

# 输出单向链表中倒数第k个结点
def find_reverse_k(head:ListNode,k):
    cur=head
    n=1 # 记录单链表的长度
    ind=1
    while cur.next:
        cur=cur.next
        n+=1
    # 即找单向链表正数的n-k+1个结点
    cur=head
    if n-k+1>0:
        while ind<n-k+1:
            cur=cur.next
            ind+=1
        return cur
    else:
        return None # 异常返回空指针
while True:
    try:
        n=int(input())
        L=list(map(int,input().split()))
        k=int(input())
        # 构建单链表
        head=ListNode(L[0])
        create_list(head,L[1:])
        # 找到倒数第k个结点
        node=find_reverse_k(head,k)
        print(node.val)
    except:
        break
        
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值