【链表】查找倒数第k个结点

本文介绍了一种在单链表中查找倒数第K个结点的方法,通过定义两个工作指针,先让一个指针移动到正数第K个位置,然后两个指针同步移动直至第一个指针到达链表末尾,此时第二个指针即指向倒数第K个结点。文章提供了详细的C++实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【链表】查找倒数第k个结点

题目

设计一个函数,在带附加头结点的单链表中查找倒数第k个结点。若查找成功,函数通过参数表送出该结点的data域的
值,并返回rue,否则只返回 false;在主函数中,调用该数并查找倒数第4个结点的值,如果查找成功,则输出查找
到的值(加一个回车),否则什么都不输出。
在这里插入图片描述

主要思想

  1. 定义两个工作指针p和q
  2. 先让p进行移动直到正数第K个数
  3. 然后q指针开始跟随p指针一起移动 ;
  4. 直至“”p“”指针遍历到链表末尾 ;
  5. 此时“”q“”指针指的就是倒数第k个数

c++源代码

#include<iostream>
#include<bits/stdc++.h>
using namespace std;

struct Node {
    int data;
	Node *next;
};

class List {
private:
	Node *first;
public:
	List();
	~List();
	void Insert(int x);
	bool SearchK(int k);
};

List::List()
{
	first = new Node();
	first->next = NULL;
}

List::~List()
{
}

void List::Insert(int x)//插入元素
{
	Node *temp = first;
	while (temp->next!=NULL)
		temp = temp->next;
	Node *n = new Node();
	n->data = x;
	n->next = NULL;
	temp->next = n;
}

//write your code here
bool List::SearchK(int k)
{
    Node *p=first;
    Node *q=first;
    int n=0;
    while(n<k)//p自己动
    {n++;
        p=p->next;
    }
    while(p!=NULL)//p,q一起移动
    {
        p=p->next;
        q=q->next;
    }

printf("%d",q->data);
    return true;
}

int main()
{
	List l;
	int i;
	cin >> i;
	while (i!=-1) {
		l.Insert(i);
		cin >> i;
	}
	//write your code here
l.SearchK(4);

	return 0;
}

结果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值