使用 C++ 在给定的单链表中从末尾找到第 K 个节点
链表是一种线性数据结构,具有多个相互连接的节点。每个节点由两个字段数据字段和下一个节点的地址组成。让我们假设我们已经给出了一个单向链表,任务是从给定单向链表的末尾找到第 k 个节点。例如,
输入-
1→2→3→4→7→8→9K= 4
输出-
节点从 4th Position is − 4
说明- 由于在给定的单向链表中,从末尾开始的“第 4 个”节点是“4”,因此我们将返回输出为“4”。
解决这个问题的方法
最初,我们给出了一个由节点组成的链表。每个节点都包含到下一个节点的数据和地址。因此,为了从末尾找到第 k 个节点,我们将使用两个最初指向链表头部的指针。
在遍历链表时,我们将移动一个指针,比如说“fast”,然后移动另一个指针,直到“fast”指针没有到达末尾。
函数 kthNodefromTheEnd(node*head, int pos) 将指向头节点的指针和位置作为参数,并从末尾返回节点。
让我们取两个指针 'slow' 和 'fast',它们最初位于头部。
遍历链表并移动快速指针。
由于“fast”指针比“slow”指针提前两步,让我们移动两个指针,直到“fast”到达终点。
现在以慢速返回指向从末尾开始的第 k 个节点的值。
示例
#include<iostream>输出结果using namespace std;
class node{
public:
int data;
node*next;
node(int d){
data=d;
next=NULL;
}
};
void insertAthead(node*&head,int d){
node*n= new node(d);
n->next= head;
head=n;
}
void printList(node*head){
while(head!=NULL){
cout<<head->data<<"-->";
head= head->next;
}
}
void kthFromtheEnd(node*head, int k){
node*slow= head;
node*fast= head;
for(int i=0;i<k;i++){
fast= fast->next;
}
while(fast!=NULL){
slow= slow->next;
fast= fast->next;
}
cout<<"节点从 "<<k<<"th position is"<<slow->data<<endl;
}
int main(){
node*head= NULL;
insertAthead(head,2);
insertAthead(head,4);
insertAthead(head,5);
insertAthead(head,6);
insertAthead(head,7);
printList(head);
cout<<endl;
kthFromtheEnd(head,4);
return 0;
}
运行上面的代码将生成输出,
节点从 4th position is: 6
说明- 给定的链表是 7→ 6→ 5→ 4→ 2→ 并且第 k 个值是“4”。因此,从末尾开始的第 4 个节点是 '6',因此我们将返回 '6'。
以上是 使用 C++ 在给定的单链表中从末尾找到第 K 个节点 的全部内容, 来源链接: utcz.com/z/311471.html