单行链表寻找倒数第k个节点,
/**
*题目介绍:给出一个单向链表,输出该链表的倒数第k个节点
*           设尾节点开始从0编号
*/
解题思路:两个指针往后移动,一定要注意边界的处理情况。此处我设置了一个头指针,头指针不存数据,仅仅作为头标志。
[cpp] view plaincopy
- /**
 - *题目介绍:给出一个单向链表,输出该链表的倒数第k个节点
 - * 设尾节点开始从0编号
 - */
 - #include <iostream>
 - #include <stdlib.h>
 - #include <cstdio>
 - using namespace std;
 - struct node
 - {
 - int value;
 - struct node * next;
 - } *head;
 - inline void nodeinit(struct node *n)
 - {
 - n->next = NULL;
 - n->value = 0;
 - }
 - void creatnodelist()
 - {
 - //头指针 应该首先分配地址
 - if(head == NULL)
 - head = (struct node *)malloc(sizeof(struct node));
 - nodeinit(head);
 - int v;
 - struct node * pt = head;
 - scanf(“%d”,&v);
 - while(v)
 - {
 - if(pt->next == NULL)
 - pt->next = (struct node *)malloc(sizeof(struct node));
 - pt=pt->next;
 - nodeinit(pt);
 - pt->value = v;
 - //cout<<pt->value ;
 - scanf(“%d”,&v);
 - }
 - }
 - int findLastK(int k)
 - {
 - struct node * p1=head;
 - struct node * p2=head;
 - while(k–)
 - p1=p1->next;
 - p1=p1->next;
 - while(p1 != NULL)
 - p1=p1->next,p2=p2->next;
 - return p2->value;
 - }
 - void print()
 - {
 - struct node * p=head->next;
 - while(p!=NULL)
 - cout<<p->value<<” ”,p=p->next;
 - }
 - int main()
 - {
 - cout << ”create node list:” << endl;
 - creatnodelist();
 - print();
 - int k;
 - cout<<”\ninput k :”;
 - scanf(“%d”,&k);
 - cout<<”\nthe last ”<<k<<” node is : ”<<findLastK(k)<<endl;
 - return 0;
 - }