【链表面试题】遍历一次,找到倒数第 k 个结点(k从1开始)

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

整体思路

1.双指针
指针A在前面第K个,指针B在指针A的后面
2.当指针A指向NULL的时候,就找到了倒数第K个结点

代码部分

// 遍历一次,找到倒数第 k 个结点(k从1开始) 
void FindK(SListNode *pFirst, int k) {
	k = 2;
	SListNode *forward = pFirst;
	SListNode *backward = pFirst;
	while (k--) {
		forward = forward->Next;
	}
	while(forward != NULL) {
		forward = forward->Next;
		backward = backward->Next;
	}
	printf("%d\n", backward->data);
}
void  TestFindK() {
	SListNode *First = NULL;
	SListPushBack(&First, 1);
	SListPushBack(&First, 2);
	SListPushBack(&First, 3);
	SListPushBack(&First, 4);
	SListPushBack(&First, 5);
	SListPushBack(&First, 6);
	FindK(First,2);
}

测试结果

在这里插入图片描述

猜你喜欢

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