AcWing 33:链表中倒数第k个节点 ← 尾插法

2024-06-06 15:44

本文主要是介绍AcWing 33:链表中倒数第k个节点 ← 尾插法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【题目来源】
https://www.acwing.com/problem/content/32/

【题目描述】
输入一个链表,输出该链表中倒数第 k 个结点。

注意:
    ●
k >= 1;
    ● 如果 k 大于链表长度,则返回 NULL;

【数据范围】
链表长度 [0,30]。

【输入样例】
输入:链表:1->2->3->4->5 ,k=2

【输出样例】
输出:4

【算法分析】
● 假设链表有 n 个结点,那么只要从头结点开始往后走 n-k 步就可以到达倒数第 k 个结点(从 1 开始计数)。
● 头插法及尾插法
头插法创建单链表:
https://blog.csdn.net/hnjzsyjyj/article/details/120285274
尾插法创建单链表:https://blog.csdn.net/hnjzsyjyj/article/details/120285300
本题算法,选用尾插法建立单链表。
● ​​​​​​​适应本例
类风格的代码如下所示:

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution {public:ListNode* findKthToTail(ListNode* head, int k) {int cnt=0;ListNode* p=head;while(p) {cnt++;p=p->next;}if(cnt<k) return NULL; //nullptrp=head;for(int i=0; i<cnt-k; i++) p=p->next;return p;}
};


【利用尾插法构建单链表后求解的完整代码】

#include <bits/stdc++.h>
using namespace std;struct LNode {int data;LNode *next;
};
typedef struct LNode *LinkList;void Tail_Insert(LinkList &L) {L=new LNode;L->next=NULL;LinkList r=L;printf("Input value:");int x;while(scanf("%d",&x)!=EOF) {LinkList p;p=new LNode;p->data=x;p->next=NULL;r->next=p;r=p;}
}void findKthToTail(LinkList &L,int k) {LinkList tail=L, head=L;if(k<=0) {printf("Input error!\n");return;}for(int i=1; i<=k; i++) {tail=tail->next;if(tail==NULL) {printf("No such node!\n");return;}}while(tail!=NULL && head!=NULL) {tail=tail->next;head=head->next;}printf("%d\n",head->data);
}int main() {int k;LinkList L=new LNode;L->next=NULL;Tail_Insert(L);printf("Input k:");while(scanf("%d",&k)!=EOF) {findKthToTail(L,k);printf("Input k:");}return 0;
}/*
Input value:9 6 2 8 5
^Z
Input k:3
2
Input k:2
8
Input k:5
9
Input k:1
5
Input k:12
No such node!
Input k:-12
Input error!
Input k:
*/




【参考文献】
https://blog.csdn.net/zwb8848happy/article/details/7330586
https://www.acwing.com/video/2698/








 

这篇关于AcWing 33:链表中倒数第k个节点 ← 尾插法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1036529

相关文章

chart 完成拓扑图单节点拖拽不影响其他节点位置

就是做这种的功能,箭头原本是可以动态重复移动的,但不知道哪里问题导致没箭头了,然后补了个edgeSymbol: ['','arrow'], 字段,才增加了箭头。 拖拽某个节点,只有关联到的线条会跟着变动其他的节点位置不变。 参考 https://gallery.echartsjs.com/editor.html?c=x8Fgri22P9 https://echarts.baidu.com/exa

LeetCode--234 回文链表

题目 请判断一个链表是否为回文链表。 示例 示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val

LeetCode--206 反转链表

题目 反转一个单链表。 示例 示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL class Solution {public:ListNode* reverseList(ListNode* head) {if (head == nullptr || head->next == nullptr){return head;}ListNo

剑指offer(C++)--两个链表的第一个公共结点

题目 输入两个链表,找出它们的第一个公共结点。 解法一 两个链表一定有交点的话,方法是指向短链表指针先走完,然后指向长链表,指向长链表指针后走完,指向短链表。所以,第二次走过,一定会在交点相遇。 class Solution {public:ListNode* FindFirstCommonNode( ListNode *pHead1, ListNode *pHead2) {ListN

(13)DroneCAN 适配器节点(一)

文章目录 前言 1 特点 2 固件  3 ArduPilot固件DroneCAN设置 4 DroneCAN适配器节点 前言 这些节点允许现有的 ArduPilot 支持的外围设备作为 DroneCAN 或 MSP 设备适应 CAN 总线。这也允许扩展自动驾驶仪硬件的功能。如允许 I2C 设备(如罗盘或空速)距离自动驾驶仪 1m 以上,并实现多达 32 个伺服输出通道。

算法6— 判断两个链表是否相交

问题: 给出两个单向链表的头指针,比如h1、h2,判断链表是否相交,如果不相交返回NULL;如果相交,返回指向第一个相交节点的指针。时间复杂度控制在O(n)。 分析: 如果两单向链表相交的话,一定是Y型相交,不可能出现X型,弄清楚这点后接下来的工作就是: (1)先找到h1,h2的最后一个节点L1和L2,同时记录节点数量a,b;(这里假设 a > b) (2)判断最后一个节点是否相同

剑指Offer—编程题56(链表中环的入口地址)

题目:一个链表中包含环,如何找出环的入口结点? 解题思路   可以用两个指针来解决这个问题。先定义两个指针P1和P2指向链表的头结点。如果链表中环有n个结点,指针P1在链表上向前移动n步,然后两个指针以相同的速度向前移动。当第二个指针指向环的入口结点时,第一个指针已经围绕着环走了一圈又回到了入口结点。    剩下的问题就是如何得到环中结点的数目。我们在面试题15的第二个相关题目时用到

剑指Offer—编程题15(链表中倒数第k个结点)

题目:输入一个链表,输出该链表中倒数第k 个结点.为了符合大多数人的习惯,本题从1 开始计数,即链表的尾结点是倒数第1 个结点.例如一个链表有6 个结点,从头结点开始它们的值依次是1 、2、3、4、5 、6。这个个链表的倒数第3 个结点是值为4 的结点. public static class ListNode {int value;ListNode next;} 解题思路:

Java数据结构4-链表

1. ArrayList的缺陷 由于其底层是一段连续空间,当在ArrayList任意位置插入或者删除元素时,就需要将后序元素整体往前或者往后搬移,时间复杂度为O(n),效率比较低,因此ArrayList不适合做任意位置插入和删除比较多的场景。因此:java集合中又引入了LinkedList,即链表结构。 2. 链表 2.1 链表的概念及结构 链表是一种物理存储结构上非连续存储结构,数据元素

33个jQuery与CSS3实现的绚丽鼠标悬停效果

只要你有创意,完全可以使用CSS3来实现漂亮的动效,当然如果配合jQuery,这样会更加强大,实现更多高级绚丽的动画效果。鼠标hover效果是很常用的,虽然很细微的东西,但网站的细节注定的网站的体验,所以也不要忽视这些小细节。 今天设计达人网整理了33个使用jQuery与CSS3实现绚丽的鼠标悬停效果,有些是纯CSS3的,这些效果你完全可以用在你的网页上,让网站获得更好的体验。 Anim