文章目录
- 前言
- 1.题目
- 2.题目分析
- 2.1.思路一
- 2.2.思路二(快慢指针)
- 3.参考代码
- 3.1.代码1--思路1
- 3.2.代码2---思路2
前言
我们上一篇数据结构与算法的章节当中,我们学习到了单链表,下面我们做几篇中,我们做几道题,来对单链表的相关知识进行一下,巩固。
Leetcode—链表的中间结点
1.题目
2.题目分析
2.1.思路一
这种思路一定可以做出来,并且也比较容易实现,但是不是最简单的。
2.2.思路二(快慢指针)
3.参考代码
3.1.代码1–思路1
typedef struct ListNode ListNode;
struct ListNode* middleNode(struct ListNode* head) {
int cnt = 0;
ListNode* pcur = head;
while (pcur)
{
pcur = pcur->next;
cnt++;
}
for (int i = 0; i < cnt / 2; i++)
{
head = head->next;
}
return head;
}
3.2.代码2—思路2
typedef struct ListNode ListNode;
struct ListNode* middleNode(struct ListNode* head)
{
//定义快慢指针
ListNode*fast = head;
ListNode*slow = head;
while (fast && fast->next)
{
slow = slow->next; //slow走一步
fast = fast->next->next; //fast走两步
}
return slow;
}
完