找出单向链表中的一个节点,该节点到尾指针的距离为K。链表的倒数第0个结点为链表的尾指针。要求时间复杂度为O(n)。
链表结点定义如下:
struct ListNode
{
int m_nKey;
ListNode* m_pNext;
}
链表节点的值初始化为1,2,3,4,5,6,7。
输入描述:
该节点到尾指针的距离K
输出描述:
返回该单向链表的倒数第K个节点,输出节点的值
输入例子1:
2
输出例子1:
6
#include <iostream>
using namespace std;
#include <algorithm>
#include <vector>
#include <string>
#include <cstring>
#include <queue>
struct ListNode
{
int m_nKey;
ListNode* m_pNext;
};
//struct ListNode {
// int val;
// struct ListNode *next;
// ListNode(int x) :
// val(x), next(NULL) {
// }
//};
int main(){
//ListNode *head=new ListNode(0);
int k;
cin>>k;
ListNode* phead = NULL;
phead = new ListNode;
phead->m_nKey = 0;
phead->m_pNext = NULL;
ListNode* p = phead;
for (int i = 1; i < 8; ++i) {
ListNode* pNewNode = new ListNode;
pNewNode->m_nKey = i; // 将新节点的值赋值为i
pNewNode->m_pNext = NULL;
p->m_pNext = pNewNode; // 上一个节点指向这个新建立的节点
p = pNewNode; // p节点指向这个新的节点
}
ListNode* p1 = phead;
for (int i = 1; i < 8; ++i) {
ListNode* node=p1->m_pNext;
if(i==7-k+1){
cout<<node->m_nKey<<endl;
}
p1=p1->m_pNext;
}
}