1、链表中倒数第k个节点:
链表节点定义如下:
struct ListNode
{
int m_nValue;
ListNode* m_pNext;
}
我的答案:
ListNode* revk(ListNode* pHead, int k)
{
if (pHead == null) return null;
int count, flag;
ListNode* pCurr_1, pCurr_2 = pHead;
while(pCurr_1->m_pNext != null)
{
pCurr_1 = pCurr_1->m_pNext;
if(count >= k)
{
flag = 1;
pCurr_2 = pCurr_2->m_pNext;
}
count++;
}
if(flag == 0)
{
pCurr_2 = null;
}
return pCurr_2;
}
测试:
1、k=0,k=1,k=中间一个,k=链表长度, k为链表长度+1
2、输入空链表
书上的答案:
ListNode* FindkthToTail(ListNode* pListHead, unsigned int k)
{
if(pListHead == null || k=0)
return null;
ListNode *pAhead = pListHead;
ListNode *pBehind = NULL;
for(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 ;
}
}