零、题目
输入一个链表,然后输出它的倒数第K个结点的值,计数从1开始,也就是说,链表结尾的元素就是倒计数第1个元素。
一、理解题目
1 链表;ListNode* pListHead;
2 目标值的位置,unsigned int k;
3 链表的遍历,while循环,
二、拟定方案
1 思路是同时走两个指针,步距是k;这样当第一个指针走到尾部第二个指针会在倒数第K个节点;ListNode* pAhead, ListNode* pBehind
2 首先先走K步,使用的是for循环实现;然后使用while循环,一直到最后;
三、code
零、题目
输入一个链表,然后输出它的倒数第K个结点的值,计数从1开始,也就是说,链表结尾的元素就是倒计数第1个元素。
一、理解题目
1 链表;ListNode* pListHead;
2 目标值的位置,unsigned int k;
3 链表的遍历,while循环,
二、拟定方案
1 思路是同时走两个指针,步距是k;这样当第一个指针走到尾部第二个指针会在倒数第K个节点;ListNode* pAhead, ListNode* pBehind
2 首先先走K步,使用的是for循环实现;然后使用while循环,一直到最后;
三、code
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;
}
四、回顾
1 相较于之前的题目来讲,这里是链表已经形成,然后是如何更好地操作链表;
2 遍历链表的本质是指针的移动;两次指针的移动,并不是同时的,我们考虑是否可以让两个指针同时移动;
参考文献
1 https://www.cnblogs.com/wenjiang/p/3310233.html
四、回顾
1 相较于之前的题目来讲,这里是链表已经形成,然后是如何更好地操作链表;
2 遍历链表的本质是指针的移动;两次指针的移动,并不是同时的,我们考虑是否可以让两个指针同时移动;
参考文献
1 https://www.cnblogs.com/wenjiang/p/3310233.html