链表中倒数第k个结点

原创 2015年07月07日 21:24:40

链表结点定义如下:

struct  ListNode

{

       int  m_nValue; 

       ListNode* m_pNext;

};

      由于本题是单链表,所以求倒数第k个即是求第n-k+1个结点。但需要遍历两次单链表。

遍历一次的方法如下:


ListNode* FindKthToTail(ListNode* pListHead, unsigned int k)
{
ListNode *pAhead = pListHead;
ListNode *pBehind = NULL;
for (unsigned int i = 0; i < k - 1; ++i)
{
pAhead = pAhead->m_pNext;
}
pBehind = pListHead;
while (pAhead->m_pNext != NULL)
{
pAhead = pAhead->m_pNext;
pBehind = pBehind->m_pNext;
}
return pBehind;
}

惊恐可以找出3种办法让这段代码崩溃:


惊恐注:写代码要特别注意鲁棒性。


ListNode* FindKthToTail(ListNode* pListHead, unsigned int k)
{
if (pListHead == NULL || k == 0)
return NULL;
ListNode *pAhead = pListHead;
ListNode *pBehind = NULL;
for (unsigned int i = 0; i < k - 1; ++i)
{
if (pAhead->m_pNext != NULL)
pAhead = pAhead->m_pNext;
else
{
return NULL;
}
}
pBehind = pListHead;
while (pAhead->m_pNext != NULL)
{
pAhead = pAhead->m_pNext;
pBehind = pBehind->m_pNext;
}
return pBehind;
}





版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

剑指Offer----面试题15:链表中倒数第K个结点

题目: 输入一个链表,输出该链表中倒数第K个结点。为了符合大多数人的习惯,本题从1开始计数,即聊表的尾结点是倒数第一个结点。例如一个链表6个结点,从头结点开始它们的值依次是1、2、3、4、5、6。...

链表中倒数第k个结点

链表中倒数第k个结点1. 题目描述输入一个链表,输出该链表中倒数第k个结点。2. 解题思路 由于是单链表,遍历链表只能顺序遍历,也不能随机的访问 要求输出的是倒数第K个结点,可以将其换算成正向数的结点...

算法-获取链表中倒数第k个结点

题目: 输入一个链表,输出该链表中的倒数第k个结点。比如链表中的值为1,2,3,4,5,6。倒数第三个结点为值为4的结点。链表定义如下:struct ListNode { int value; ...

剑指offer 15. 链表中倒数第k个结点

class ListNode { int data; ListNode next; } // 题目:输入一个链表输出链表的倒数第k个结点 // 解法:设置两个标记,先让第一个走k步,接着让他们同...

链表中倒数第k个结点(剑指offer)

链表中倒数第k个结点 参与人数:1699时间限制:1秒空间限制:32768K通过比例:21.37%最佳记录:0 ms|8552K(来自  无声) 题目描述 输入一个链表,...

查找链表中倒数第k个结点

例如有一个链表一共有6个结点,从头开始他们的值依次是1、2、3、4、5、6,那么这个链表的倒数第三个结点是值为4的结点。 首先看到这个题目,我们也许会想到从链表的尾端开始遍历,回溯K步,可是这个链表...

Lintcode 删除链表中倒数第k个结点

给定一个链表,删除链表中倒数第n个节点,返回链表的头节点。样例 给出链表1->2->3->4->5->null和 n = 2.删除倒数第二个节点之后,这个链表将变成1->2->3->5->null....

链表中倒数第k个结点

题目描述 输入一个链表,输出该链表中倒数第k个结点。 解题思路: 用两个指针p,pre指向链表的头结点,先将p向前移动k-1个位置,随后p,pre一起向后移动,当p到达链表尾部时,pre则为倒数第...

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

题目:输入带头结点的单链表L,输出该单链表中倒数第k个结点。单链表的倒数第0个结点为该单链表的尾指针。要求只能遍历一次单链表。 解题思路: 如果不要求只能遍历一次单链表,我们可以先遍历一次单链表,...

题目1517:链表中倒数第k个结点

题目1517:链表中倒数第k个结点 时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:2705 解决:1206 题目描述: 输入一个...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)