`
qiemengdao
  • 浏览: 276498 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

输出链表倒数第K个结点

 
阅读更多

题目描述:

输入一个单向链表,输出该链表中倒数第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;
}



分享到:
评论

相关推荐

    2009计算机考研题:查找链表中倒数第k个结点

    本题目的核心是查找链表中的倒数第k个节点,这是一个经典的链表问题,常见于面试和考研试题中。下面我们将深入探讨这个问题以及如何通过编程解决。 首先,链表是由一系列节点组成的数据结构,每个节点包含一个数据...

    python实现获取单向链表倒数第k个结点的值示例

    本篇将详细讲解如何使用Python实现获取单向链表倒数第k个结点的值,并通过实例分析相关操作技巧。 首先,我们需要定义链表的节点类`Node`,它包含一个数据项`item`和一个指向下一个节点的引用`next`。节点的初始化...

    Danceiny#WikiNotes#链表中倒数第k个结点1

    题目输入一个链表,输出该链表中倒数第k个结点思路将输入链表赋给两个链表;然后和另外一个链表一起走到链表尾,另外一个链表即在倒数第k个结点。if head ==

    链表中倒数第k个结点

    输入一个链表,输出该链表中倒数第k个结点 解题思路 本题的思路和之前看矩形那一题有相似之处,就是我们优先考虑边界情况,比如本题,我们需要查找链表中的倒数第K个节点,那么想象此时身处链表最后的位置,我想要...

    C语言实现输出链表中倒数第k个节点

    本篇将详细讲解如何实现输出链表中倒数第k个节点的C语言程序。 首先,我们需要定义链表节点的结构体。在示例代码中,`Node` 结构体包含两个成员:`item` 存储数据元素,`next` 是指向下一个节点的指针。结构体初始...

    怎样找到链表倒数第k个元素

    题目:输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针。 分析:使用两个指针,low,fast,先把fast的指针指向第k个元素,然后low和fast同时向后遍历,当fast遍历到结尾时,low...

    Java输出链表倒数第k个节点

    Java输出链表倒数第k个节点 在Java编程中,输出链表倒数第k个节点是一个常见的问题,本文将为大家介绍三种不同的设计思路及代码示例,旨在帮助需要的朋友更好地理解和解决这个问题。 思路1:计算链表长度 第一种...

    剑指Offer(Python多种思路实现):链表中倒数第k个节点

    题:输入一个链表,输出该链表中倒数第k个结点。 解题思路一:为了实现只遍历链表一次就能找到倒数第k个节点,我们可以定义两个指针。让第一个指针先向前走k-1步,第二个指针保持不动;从第k步开始,第二个指针也...

    取单链表倒数第k个元素

    处理单链表的问题时,有时我们需要找到链表中的特定位置的元素,例如“取单链表倒数第k个元素”这个问题。这个问题在面试中经常出现,因为它能够考察开发者对链表操作的理解和编程能力。 ### 算法描述 要找到...

    cpp代码-输入一个链表,输出该链表中倒数第k个结点。

    在这个问题中,我们需要设计一个算法,给定一个链表的头节点和整数k,返回链表中倒数第k个节点。 首先,我们定义链表节点的数据结构。通常,链表节点包含两个部分:数据域和指针域。例如: ```cpp struct ListNode...

    华为机试 高级题 链表的整合

    给你一个链表,节点有值域,计数器(表示值出现的次数,初始化为1),指针域,节点的值有重复的,去除重复的值,修改相应节点的计数器。这样做的好处就是节省的很多存储空间。 对即将参加华为机考的同学有非常大的帮助...

    剑指offer刷题(十三)链表中倒数第k个结点

    输入一个链表,输出该链表中倒数第k个结点。 思路 用两个指针,指针p、q最开始都指向 head,p 先向右移动 k 位,然后 p 和 q 再一起同步向右移动,当 p 到达边界时(p指向空), q 正好指向了倒数第 k 个结点 做完...

    【Python学习-链表】【剑指offer】之链表中倒数第k个结点、反转链表、合并排序链表

    输入一个链表,输出该链表中倒数第k个结点。 分析 方法一:先计数,在查询,相当于遍历两遍。 方法二:将所有值存到一个list里,只遍历一遍。 方法三:两个指针都指向头结点,一个指针先走k-1个节点,然后两个指针...

    C++实现单链表删除倒数第k个节点的方法

    "C++实现单链表删除倒数第k个节点的方法" 在C++编程中,单链表是一种常用的数据结构,删除单链表中的倒数第k个节点是一种常见的操作。本文将详细介绍C++实现单链表删除倒数第k个节点的方法,并结合实例形式分析了...

    剑指Offer #14 链表中倒数第k个结点(快慢指针) | 图文详解

    输入一个链表,输出该链表中倒数第k个结点。 节点结构如下: public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } } 题目解析 这是一道和链表相关的题,对于这种...

    查找倒数第N个结点(单链表)

    这段代码创建了一个包含 1 到 5 的单链表,并找到了倒数第 2 个节点,输出结果应为 4。 总结来说,寻找单链表中倒数第 n 个节点的问题主要涉及链表的遍历和双指针技巧。通过一次遍历,我们可以在常数的空间复杂度下...

Global site tag (gtag.js) - Google Analytics