链表中倒数第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——输出链表倒数第K个结点

题目:i输入一个链表,输出链表的倒数第K个结点 本体考虑到链表的特殊性问题,如果按照一般思路思考,我们可以先将链表遍历到最后一个结点,然后再从前向后遍历找到倒数第k个结点。但是链表不允许从后向前进行...
  • Leos618
  • Leos618
  • 2017年07月04日 09:16
  • 131

【38】求链表倒数第k个结点

题目:输入一个链表,输出链表中的倒数第k

题目15:链表中倒数第K个结点

题目:输入一个链表,输出该链表中倒数第K个结点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第一个结点。例如一个链表有6个结点,从头结点开始他们的值依次是1,2,3,4,5,6。这个...
  • jdx888
  • jdx888
  • 2016年09月14日 15:28
  • 132

剑指offer----链表中倒数第K个结点

输入一个链表,输出该链表中倒数第K个结点。从1开始计数,即该链表的尾节点是倒数第一个结点。 思路: 一、链表是单向链表,只能从头结点往后依次遍历,倒数第K个结点,也就是从头结点开始的n-(k-1)...
  • snow_7
  • snow_7
  • 2016年06月20日 11:31
  • 186

【面试题15】链表中倒数第K个结点

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

求单链表中倒数第k个结点

题目:实现一个算法,找出单链表中倒数第k个结点。 解法:        下面以递归和非递归的方式解决这个问题。一般来说,递归解决更简洁,但是效率比较差。 例如,就这个问题来说,递归解法的代码量大概只有...

华为OJ——输出单向链表中倒数第k个结点

题目描述   输入一个单向链表,输出该链表中倒数第k个结点,链表的倒数第1个结点为链表的尾指针。 链表结点定义如下:    struct ListNode   { ...

面试题15—链表中倒数第K个结点

题目:求单链表中倒数第K个结点,最后一个结点的下标设置为1。 代码示例: #include using namespace std; template struct Node { T data...

面试题15. 链表中倒数第k个结点

题目描述输入一个链表,输出该链表中倒数第k个结点。思路: Step1. 设置两个指针slow和fast,初始时均指向头结点 Step2. slow不动,fast向前走k-1步 Step3. 然后...

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

链表中倒数第k个结点 参与人数:1699时间限制:1秒空间限制:32768K通过比例:21.37%最佳记录:0 ms|8552K(来自  无声) 题目描述 输入一个链表,...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:链表中倒数第k个结点
举报原因:
原因补充:

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