【考研·数据结构】408真题 (2009年42题) 的前后指针解法】

题目

【考研·数据结构】408真题 (2009年42题) 的前后指针解法】_第1张图片

代码思路

使用前后指针来定位倒数第 k 个节点。具体实现如下:

  1. 定义一个前指针和一个后指针,初始时两个指针都指向链表头结点。
  2. 将后指针向右移动 k 步,如果此时后指针为空,说明链表长度小于 k ,直接返回 0。
  3. 同时移动前后指针,直到后指针到达链表末尾,前指针就指向了倒数第 k 个节点。
  4. 输出该节点的值,并返回 1 表示函数执行成功。

需要注意的是,在处理链表长度小于 k 的情况时,可以将输出内容修改为任意值,以便于调试程序。此外,由于该函数只需寻找倒数第 k 个节点,且不需要改变链表结构,因此时间复杂度为 O(n),空间复杂度为 O(1)。

int last_k(Node* node, int k)
{
	// 定义前后指针和计数器
	Node* front = node;
	Node* rear = node;


	// 将后指针向右移动 k 步
	while (k--)
	{
		rear = rear->next;
		if (rear == nullptr)  // 如果链表长度小于 k,返回 0
		{
			return 0;
		}
	}

	// 同时移动前后指针,直到后指针到达链表末尾
	while (rear != nullptr)
	{
		rear = rear->next;
		front = front->next;
	}

	cout << front->x;  // 输出倒数第 k 个节点的值
	return 1;
}

你可能感兴趣的:(408考研数据结构算法大题,考研,数据结构,链表)