找到单链表的后数第k个节点

来源:互联网 发布:井冈山大学网络客户端 编辑:程序博客网 时间:2024/06/06 18:32

看到一个面试题,简单的,才下手做的。返回单链表的第k个节点(给出了尾指针),跟那个步长分别为一为二找到中间和最后的那个差不多。

就是定义两个指针,都指向head,然后一个向后移动k步,再同时移动,到达尾巴即可。

代码如下,望不吝赐教!

#include <iostream>using namespace std;typedef int ElemType;class linkList{public:linkList();inline void insert(ElemType elem);void print() const;const ElemType& get_k(int k);private:typedef struct Node{ElemType data;Node* next;Node(ElemType elem){data = elem;next = NULL;}};Node* head;Node* tail;};linkList::linkList(){head = NULL;tail = NULL;}void linkList::insert(ElemType elem){Node* pnew = new Node(elem);if(head){pnew->next = head;}head = pnew;}const ElemType& linkList::get_k(int k){Node* p1 = head;Node* p2 = head;for(int i = 1; i < k; ++i){if(p2->next == NULL){cout << "Error! " << endl;return -1;}p2 = p2->next;}while(p2->next){p1 = p1->next;p2 = p2->next;}return p1->data;}void linkList::print() const{Node* p = head;while(p){cout << p->data << "---->";p = p->next;}cout <<"\n\n";}int main(void){int k = 8;linkList list;list.insert(1);list.insert(2);list.insert(3);list.insert(4);list.insert(5);list.insert(6);list.insert(7);list.insert(8);list.print();cout << "the number of last but " << k << " is:";cout <<list.get_k(k) << endl;return 0;}