链表OJ2——链表的中间结点(c语言实现)

声明:我的链表OJ系列是针对无头单向不循环链表的题目

题目 

题目来源:. - 力扣(LeetCode)

链表OJ2——链表的中间结点(c语言实现)_第1张图片

思路1——直接遍历

因为这道题目并没有时间复杂度的规定,所以若想要解决这道问题是非常简单的。我们只需要先遍历一遍链表,统计链表当中的结点个数,然后再遍历一遍链表,寻找中间位置的结点即可。

struct ListNode {
	int val;
	struct ListNode *next;
};

struct ListNode* middleNode(struct ListNode* head)
{
	struct ListNode* cur = head;//记录当前结点位置
	int count = 0;//记录链表中结点的总数
	while (cur)//遍历的停止条件
	{
		count++;//总数加一
		cur = cur->next;//指针后移
	}
	int mid = count / 2;//中间结点与第一个结点之间相差的结点数
	struct ListNode* midnode = head;//记录中间结点的位置
	while (mid--)//从第一个结

你可能感兴趣的:(数据结构初阶,链表,数据结构)