【链表面试题】遍历一次,找到中间结点

版权声明:如需转载,请注明出处 https://blog.csdn.net/baidu_41813368/article/details/83796075

整体思路

1.双指针法
一个指针A是另外一个指针B的2倍
2.A走到尽头的时候,B就走到中间节点
3.什么时候走到尽头,指针A指向一个空指针NULL

代码部分

// 遍历一次,找到中间结点 
SListNode * FindMid(SListNode *pFirst)
{
	SListNode *fast = pFirst;
	SListNode *slow = pFirst;
	while (1)
	{
		fast = fast->Next;
		if (fast == NULL) {
			break;
		}
		fast = fast->Next;
		if (fast == NULL) {
			break;
		}
		slow = slow->Next;
	}
	printf("%d\n", slow->data);
}

void  TestFindMid() {
	SListNode *First = NULL;
	SListPushBack(&First, 1);
	SListPushBack(&First, 2);
	SListPushBack(&First, 3);
	SListPushBack(&First, 4);
	SListPushBack(&First, 5);
	FindMid(First);
	SListPushBack(&First, 6);
	FindMid(First);
}

测试结果

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/baidu_41813368/article/details/83796075