您的位置:首页 > Web前端

剑指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);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: