标签:结点 ListNode next 链表 add root 倒数第
题目:输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针。
分析:
单链表只能向后遍历,不能向前遍历,尾指针好找,倒数第K个不能从尾指针向前找。
倒的不好找,正的好找,我们只需要知道链表的总长度,就可以知道正数第几个节点(len(list) - k -1)。
实现如下:
#include<iostream>
using namespace std;
struct ListNode{
ListNode(int _v = 0):value(_v), next(NULL) {}
int value;
ListNode* next;
void add(ListNode* _l)
{
if(next== NULL)
next = _l;
else
next->add(_l);
}
};
ListNode* findNode(ListNode* root, int k/*倒数第k个*/)
{
int len = 0;
ListNode* p = root;
while(p != NULL)
{
len ++;
p = p->next;
}
if(k > len) return NULL;
int i = 1;
p = root;
while( i < len-k+1)
{
p = p->next;
i++;
}
return p;
}
int main()
{
ListNode *root = new ListNode(0);
ListNode l1(1);
ListNode l2(2);
ListNode l3(3);
ListNode l4(4);
ListNode l5(5);
ListNode l6(6);
root->add(&l6);
root->add(&l5);
root->add(&l4);
root->add(&l3);
root->add(&l2);
root->add(&l1);
cout << "List 节点为:" ;
ListNode* p = root;
while(p != NULL)
{
cout << p->value << ",";
p = p->next;
}
cout << endl;
p = findNode(root, 4);
cout << "List 倒数第 4 个节点是:" << p->value << endl;
return 0;
}
输出结果为:
List 节点为:0,6,5,4,3,2,1,
List 倒数第 4 个节点是:4
标签:结点,ListNode,next,链表,add,root,倒数第 来源: https://blog.csdn.net/A1215383843/article/details/113408178
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。