题目:输入一个单向链表,输出该链表中倒数第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
11. 微软面试题:输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针,布布扣,bubuko.com
11. 微软面试题:输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针
原文:http://blog.csdn.net/hhh3h/article/details/20832387