leetcode-链表的中间结点-11

链表的中间结点

题目要求
  给定一个头结点为 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。
示例1:
输入:[1,2,3,4,5]
输出:[3,4,5]
思路
  如果这是一个空链表,直接返回头结点。然后我们设置一个快慢指针,快指针a一次走两格,慢指针b一次走一格,这样算一次循环,因为肯定是有返回值,所以,我们循环直接设置成死循环就可以了。
图解
在这里插入图片描述
代码实现

struct ListNode* middleNode(struct ListNode* head){
	if (head == NULL)
	{
		return head;
	}
	struct ListNode* a = head;
	struct ListNode* b = head;
	while (1)
	{
		if (a->next != NULL)
		{
			a = a->next;
			b = b->next;
		}
		else
		{
			return b;
		}
		if (a->next != NULL)
		{
			a = a->next;
		}
		else
		{
			return b;
		}
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_43580319/article/details/113361668