您的位置:首页 > 编程语言 > C语言/C++

链表中的倒数第k个节点

2015-11-01 14:26 381 查看
题目:输入一个链表,输出该链表的倒数第k个节点。从1开始计数,即链表的尾节点为倒数第1个节点。

解答:首先自然想到的是寻找倒数第k个节点,那么就是从前往后数第n-k+1个节点,则先对链表遍历一遍得到链表的长度,然后第二次遍历时走n-k+1步就可以了。但是该方法需要对链表遍历两次,有没有只需要遍历依次的方法?自然是有的,可以想到用两个指针的方法,先让第一个指针先走k-1步,然后第二个指针指向链表的第1个节点,然后两个指针同时往后走,当第二个指针达到尾节点时,第一个指针指向的正是倒数第k个节点。struct Node{
int m_data;
Node* m_pNext;
Node(const int data = 0,Node* next = NULL):m_data(data),m_pNext(next){}
};

Node* FindKthNodeToTail(Node* pHead,const int k)
{
if(!pHead || k <= 0)
return NULL;

Node* pFirstNode = pHead;
Node* pSecondNode = pHead;
for(int index = 0; index < k-1; ++index)
{
if(NULL == pFirstNode->m_pNext)//防止k大于链表长度
return NULL;
pFirstNode = pFirstNode->m_pNext;
}
while(pFirstNode->m_pNext)
{
pFirstNode = pFirstNode->m_pNext;
pSecondNode = pSecondNode->m_pNext;
}
return pSecondNode;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  链表 struct c++