算法题目---链表中倒数第k个结点
来源:互联网 发布:口气清新的牙膏 知乎 编辑:程序博客网 时间:2024/06/11 17:50
输入一个链表,输出该链表中倒数第k个结点。
struct ListNode
{
int m_nValue;
ListNode *m_pNext;
};
ListNode* CreateListNode(int value)
{
ListNode* pNode = new ListNode();
pNode->m_nValue = value;
pNode->m_pNext = NULL;
return pNode;
}
void ConnectListNodes(ListNode* pCurrent, ListNode* pNext)
{
if(pCurrent == NULL)
{
printf("Error to connect two nodes.\n");
}
pCurrent->m_pNext = pNext;
}
void PrintListNode(ListNode* pNode)
{
if(pNode == NULL)
{
printf("The node is NULL\n");
}
else
{
printf("The key in node is %d.\n", pNode->m_nValue);
}
}
ListNode *FindKth(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;
}
void DestroyList(ListNode* pHead)
{
ListNode* pNode = pHead;
while(pNode != NULL)
{
pHead = pHead->m_pNext;
delete pNode;
pNode = pHead;
}
}
void Test1()
{
printf("=====Test1 starts:=====\n");
ListNode* pNode1 = CreateListNode(1);
ListNode* pNode2 = CreateListNode(2);
ListNode* pNode3 = CreateListNode(3);
ListNode* pNode4 = CreateListNode(4);
ListNode* pNode5 = CreateListNode(5);
ConnectListNodes(pNode1, pNode2);
ConnectListNodes(pNode2, pNode3);
ConnectListNodes(pNode3, pNode4);
ConnectListNodes(pNode4, pNode5);
printf("expected result: 4.\n");
ListNode* pNode = FindKth(pNode1, 2);
PrintListNode(pNode);
DestroyList(pNode1);
}
void Test2()
{
printf("=====Test2 starts:=====\n");
ListNode* pNode1 = CreateListNode(1);
ListNode* pNode2 = CreateListNode(2);
ListNode* pNode3 = CreateListNode(3);
ListNode* pNode4 = CreateListNode(4);
ListNode* pNode5 = CreateListNode(5);
ConnectListNodes(pNode1, pNode2);
ConnectListNodes(pNode2, pNode3);
ConnectListNodes(pNode3, pNode4);
ConnectListNodes(pNode4, pNode5);
printf("expected result: 5.\n");
ListNode* pNode = FindKth(pNode1, 1);
PrintListNode(pNode);
DestroyList(pNode1);
}
void Test3()
{
printf("=====Test3 starts:=====\n");
ListNode* pNode1 = CreateListNode(1);
ListNode* pNode2 = CreateListNode(2);
ListNode* pNode3 = CreateListNode(3);
ListNode* pNode4 = CreateListNode(4);
ListNode* pNode5 = CreateListNode(5);
ConnectListNodes(pNode1, pNode2);
ConnectListNodes(pNode2, pNode3);
ConnectListNodes(pNode3, pNode4);
ConnectListNodes(pNode4, pNode5);
printf("expected result: 1.\n");
ListNode* pNode = FindKth(pNode1, 5);
PrintListNode(pNode);
DestroyList(pNode1);
}
void Test4()
{
printf("=====Test4 starts:=====\n");
printf("expected result: NULL.\n");
ListNode* pNode = FindKth(NULL, 100);
PrintListNode(pNode);
}
void Test5()
{
printf("=====Test5 starts:=====\n");
ListNode* pNode1 = CreateListNode(1);
ListNode* pNode2 = CreateListNode(2);
ListNode* pNode3 = CreateListNode(3);
ListNode* pNode4 = CreateListNode(4);
ListNode* pNode5 = CreateListNode(5);
ConnectListNodes(pNode1, pNode2);
ConnectListNodes(pNode2, pNode3);
ConnectListNodes(pNode3, pNode4);
ConnectListNodes(pNode4, pNode5);
printf("expected result: NULL.\n");
ListNode* pNode = FindKth(pNode1, 6);
PrintListNode(pNode);
DestroyList(pNode1);
}
void Test6()
{
printf("=====Test6 starts:=====\n");
ListNode* pNode1 = CreateListNode(1);
ListNode* pNode2 = CreateListNode(2);
ListNode* pNode3 = CreateListNode(3);
ListNode* pNode4 = CreateListNode(4);
ListNode* pNode5 = CreateListNode(5);
ConnectListNodes(pNode1, pNode2);
ConnectListNodes(pNode2, pNode3);
ConnectListNodes(pNode3, pNode4);
ConnectListNodes(pNode4, pNode5);
printf("expected result: NULL.\n");
ListNode* pNode = FindKth(pNode1, 0);
PrintListNode(pNode);
DestroyList(pNode1);
}
int main()
{
Test1();
Test2();
Test3();
Test4();
Test5();
Test6();
return 0;
}
- 算法题目---链表中倒数第k个结点
- 题目1517:链表中倒数第k个结点-九度
- 题目1517:链表中倒数第k个结点
- 面试经典题目:链表中倒数第k个结点
- 九度题目1517:链表中倒数第k个结点
- 题目1517:链表中倒数第k个结点
- 题目1517:链表中倒数第k个结点
- 题目1517:链表中倒数第k个结点
- 题目1517:链表中倒数第k个结点
- 题目1517:链表中倒数第k个结点
- 题目15:链表中倒数第K个结点
- 题目1517:链表中倒数第k个结点
- 【算法】求链表中倒数第K个结点
- 算法题9 查找链表中倒数第k个结点
- 算法学习五---输出链表中倒数第k个结点
- 面试算法(十四)链表中倒数第k个结点
- 每天一个算法之链表中倒数第K个结点
- 算法-获取链表中倒数第k个结点
- .net 字符串中某个特定字符串的索引后添加新字符串
- (高通平台)pdaf log打印不出来的检查步骤
- kali更新源
- eclipse配置maven + 创建maven项目
- Android WebView保存Cookie登录
- 算法题目---链表中倒数第k个结点
- WEB容器启动之Web.xml加载顺序
- hashMap的分析,写的比较好
- “注意力”成为公司最有价值的资产,应该如何保护它?
- Android支付sdk开发流程
- hello
- 智能指针(一):STL auto_ptr实现原理
- Qt报Multiple definition错误的解决
- Windows server 2012 R2开机进入cmd,关闭后黑屏问题。