剑指offer相关题目:求链表的中间结点
2016-03-30 12:29
330 查看
// 求链表的中间结点
//思路:定义两个指针,第一个指针每次走两步,第二个指针每次走一步
//当走的快的指针走到链表的末尾时,走得慢的指针正好在链表的中间
ListNode* FindMiddleNode(ListNode* pListHead)
{if(pListHead==NULL)
return NULL;
ListNode* pFirst=pListHead;
ListNode* pSecond=pListHead;
while (pSecond->m_pNext!=NULL)
{
pSecond=pSecond->m_pNext;
if(pSecond->m_pNext==NULL)
break;
pSecond=pSecond->m_pNext;
pFirst=pFirst->m_pNext;
}
return pFirst;
}
//************测试相关题目****************
// 奇数链表
void TestForRelative1()
{
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: 3.\n");
ListNode* pNode = FindMiddleNode(pNode1);
PrintListNode(pNode);
DestroyList(pNode1);
}
// 偶数结点
void TestForRelative2()
{
printf("=====Test1 starts:=====\n");
ListNode* pNode1 = CreateListNode(1);
ListNode* pNode2 = CreateListNode(2);
ListNod
9cd2
e* pNode3 = CreateListNode(3);
ListNode* pNode4 = CreateListNode(4);
ConnectListNodes(pNode1, pNode2);
ConnectListNodes(pNode2, pNode3);
ConnectListNodes(pNode3, pNode4);
//求中间结点
printf("expected result: 2.\n");
ListNode* pNode = FindMiddleNode(pNode1);
PrintListNode(pNode);
DestroyList(pNode1);
}
// 只有一个结点
void TestForRelative3()
{
printf("=====Test1 starts:=====\n");
ListNode* pNode1 = CreateListNode(1);
//求中间结点
printf("expected result: 1.\n");
ListNode* pNode = FindMiddleNode(pNode1);
PrintListNode(pNode);
DestroyList(pNode1);
}
// 只有两个结点
void TestForRelative4()
{
printf("=====Test1 starts:=====\n");
ListNode* pNode1 = CreateListNode(1);
ListNode* pNode2 = CreateListNode(2);
ConnectListNodes(pNode1, pNode2);
//求中间结点
printf("expected result: 1.\n");
ListNode* pNode = FindMiddleNode(pNode1);
PrintListNode(pNode);
DestroyList(pNode1);
}
// 空指针
void TestForRelative5()
{
printf("=====Test1 starts:=====\n");
ListNode* pNode1 = NULL;
//求中间结点
printf("expected result: NULL.\n");
ListNode* pNode = FindMiddleNode(pNode1);
PrintListNode(pNode);
DestroyList(pNode1);
}
相关文章推荐
- jQuery源代码学习笔记:构造jQuery对象
- js 实现四叉树
- JSTL核心标签库
- JSTL
- EL表达式隐式对象
- 我是怎么从顾虑到热爱ReactJS的(与AngularJS经典MVC数据绑定的对比)
- 前端开发我为什么选择cordova
- 前端开发我为什么选择cordova
- 前端开发我为什么选择cordova
- js 数组的push()问题
- jquery插件资源
- JS 实现 startWith endWith函数
- 疯子求助-梧桐雨解答的jsp proxy
- jQuery 效果 - 动画
- Web动态加载JS外部文件(script标签)
- 关于angularJS绑定数据时自动转义html标签
- 从零开始搭建前端数据监控系统(一)-同类产品调研
- 【POJ】3398 Perfect Service
- js Eventutil内容
- js 定义数组,初始化