题目描述:给定一个节点类型为int的单链表,求离终点距离为k的节点的值是多少
思路:定义两个指针,第一个指针从链表的头指针开始遍历向前走k-1步,第二个指针保持不动;从第k步开始,第二个指针也开始从链表的头指针开始遍历。由于两个指针距离保持在k-1,当地一个指针到达链表的尾节点时,第二个指针正好指向倒数第k个节点。
核心代码如下:
#include <iostream>
#include <vector>
using namespace std;
int n; //全局变量
struct node{
int data;
node *next;
};
void create(node* &list){ //初始化,不要忘记list前面的&
node *pre;
node *cur;
pre=new node;
int m;
cout << "请输入链表第 0 个元素: ";
cin >> m;
pre->data=m;
pre->next=NULL;
list=pre;
for(int i=1;i<n;i++){
cout << "请输入链表第 " << i << " 个元素: ";
int bb;
cin >> bb;
cur=new node;
cur->data=bb;
cur->next=NULL;
pre->next=cur;
pre=cur;
}
cout << "初始化链表完毕" << endl;
}
void print(node* list){
cout << "链表元素为:" << endl;
while(list){
cout<< list->data << " ";
list = list->next;
}
cout<<endl;
}
void find(node* list, int k){
node *first=list; //前一个指针
int cout = 1;
while(cout++ < k){ //向前移动k-1位
if(first->next == NULL){
cout << "error" << endl;
return;
}
else first = first->next;
}
node *index=list; //后一个指针,此时first和index正好相差k-1位
while(first->next != NULL){ //当first遍历到末尾时index必是所要求的值
first = first->next;
index = index->next;
}
cout<< index->data << endl;
return;
}
int main(void){
//给定一个节点类型为int的单链表,求离终点距离为k的节点的值是多少
//离终点距离为k,就相当于倒数第k+1个节点
int k;
node *list;
cin >> n;
cout << "初始化链表..." << endl;
create(list);
print(list);
cout << "请输入离终点距离为k的值: ";
cin >> k;
find(list, k + 1);
return 0;
}