题目描述:
输入一个单向链表,输出该链表中倒数第k个结点。
分析:
方法1:要输出链表中的倒数第K个结点,最自然的想法是先求出链表的长度N,然后从头遍历链表输出链表的第N-K+1个结点即可。注意本题数字从1计数,也就是说倒数第1个节点是链表最后一个结点。例如链表长度为4,需要输出倒数第2个结点,则我们只需要从头开始输出链表第3个结点即可。该思路代码如下:
struct node {
int data;
struct node* next;
};
struct node *getK1(struct node *list, int k)
{
int n = length(list); //求出链表长度
if (k > n) return NULL;
struct node *current = list;
int i = 0;
for (; i<n-k; i++) //遍历链表,找出第N-K+1个结点
current = current->next;
return current;
}
int length(struct node *head)
{
struct node *current = head;
int count = 0;
while (current != NULL) {
count++;
current = current->next;
}
return count;
}
方法2:方法1需要遍历链表2遍,第1遍求长度,第2遍求结点。另外一种比较巧妙的方法是不求链表长度,只需遍历链表一遍即可。方法如下:设置两个指针p1,p2,首先p1和p2都指向head,然后p2向前走k步,这样p1和p2之间就间隔k个节点。最后p1和p2同时向前移动,p2走到链表末尾的时候p1刚好指向倒数第K个结点。该方法代码如下:
struct node *getK(struct node *head, int k)
{
struct node *p1, *p2;
p1 = p2 = head; //都指向链表头
for (; k>0 && p2!=NULL; k--)
p2 = p2->next; //p2先走k步
if (k > 0) return NULL; //如果链表长度不够,返回NULL
while (p2 != NULL) { //现在p1和p2同时移动
p1 = p1->next;
p2 = p2->next;
}
return p1;
}
分享到:
相关推荐
本题目的核心是查找链表中的倒数第k个节点,这是一个经典的链表问题,常见于面试和考研试题中。下面我们将深入探讨这个问题以及如何通过编程解决。 首先,链表是由一系列节点组成的数据结构,每个节点包含一个数据...
本篇将详细讲解如何使用Python实现获取单向链表倒数第k个结点的值,并通过实例分析相关操作技巧。 首先,我们需要定义链表的节点类`Node`,它包含一个数据项`item`和一个指向下一个节点的引用`next`。节点的初始化...
题目输入一个链表,输出该链表中倒数第k个结点思路将输入链表赋给两个链表;然后和另外一个链表一起走到链表尾,另外一个链表即在倒数第k个结点。if head ==
输入一个链表,输出该链表中倒数第k个结点 解题思路 本题的思路和之前看矩形那一题有相似之处,就是我们优先考虑边界情况,比如本题,我们需要查找链表中的倒数第K个节点,那么想象此时身处链表最后的位置,我想要...
本篇将详细讲解如何实现输出链表中倒数第k个节点的C语言程序。 首先,我们需要定义链表节点的结构体。在示例代码中,`Node` 结构体包含两个成员:`item` 存储数据元素,`next` 是指向下一个节点的指针。结构体初始...
题目:输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针。 分析:使用两个指针,low,fast,先把fast的指针指向第k个元素,然后low和fast同时向后遍历,当fast遍历到结尾时,low...
Java输出链表倒数第k个节点 在Java编程中,输出链表倒数第k个节点是一个常见的问题,本文将为大家介绍三种不同的设计思路及代码示例,旨在帮助需要的朋友更好地理解和解决这个问题。 思路1:计算链表长度 第一种...
题:输入一个链表,输出该链表中倒数第k个结点。 解题思路一:为了实现只遍历链表一次就能找到倒数第k个节点,我们可以定义两个指针。让第一个指针先向前走k-1步,第二个指针保持不动;从第k步开始,第二个指针也...
处理单链表的问题时,有时我们需要找到链表中的特定位置的元素,例如“取单链表倒数第k个元素”这个问题。这个问题在面试中经常出现,因为它能够考察开发者对链表操作的理解和编程能力。 ### 算法描述 要找到...
在这个问题中,我们需要设计一个算法,给定一个链表的头节点和整数k,返回链表中倒数第k个节点。 首先,我们定义链表节点的数据结构。通常,链表节点包含两个部分:数据域和指针域。例如: ```cpp struct ListNode...
给你一个链表,节点有值域,计数器(表示值出现的次数,初始化为1),指针域,节点的值有重复的,去除重复的值,修改相应节点的计数器。这样做的好处就是节省的很多存储空间。 对即将参加华为机考的同学有非常大的帮助...
输入一个链表,输出该链表中倒数第k个结点。 思路 用两个指针,指针p、q最开始都指向 head,p 先向右移动 k 位,然后 p 和 q 再一起同步向右移动,当 p 到达边界时(p指向空), q 正好指向了倒数第 k 个结点 做完...
输入一个链表,输出该链表中倒数第k个结点。 分析 方法一:先计数,在查询,相当于遍历两遍。 方法二:将所有值存到一个list里,只遍历一遍。 方法三:两个指针都指向头结点,一个指针先走k-1个节点,然后两个指针...
"C++实现单链表删除倒数第k个节点的方法" 在C++编程中,单链表是一种常用的数据结构,删除单链表中的倒数第k个节点是一种常见的操作。本文将详细介绍C++实现单链表删除倒数第k个节点的方法,并结合实例形式分析了...
输入一个链表,输出该链表中倒数第k个结点。 节点结构如下: public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } } 题目解析 这是一道和链表相关的题,对于这种...
这段代码创建了一个包含 1 到 5 的单链表,并找到了倒数第 2 个节点,输出结果应为 4。 总结来说,寻找单链表中倒数第 n 个节点的问题主要涉及链表的遍历和双指针技巧。通过一次遍历,我们可以在常数的空间复杂度下...