链表中倒数第k个节点
#include <iostream> using namespace std; struct ListNode { int val; ListNode *next; ListNode(int x):val(x),next(NULL){}; } ; ListNode* daoshu(ListNode *head,int k) { if(head==NULL||k==0) return NULL; ListNode *p1=head; ListNode *p2=head; for(;k>1;k--) { if(p1->next!=NULL) p1=p1->next; else return NULL; } while(p1->next!=NULL) { p1=p1->next; p2=p2->next; } return p2; } int main() { ListNode *head=new ListNode(0); ListNode *p=head,*q; int a[5]={1,2,3,4,5}; for(int i=0;i<=4;i++) { ListNode *newnode=new ListNode(a[i]); p->next=newnode; p=newnode; } p=head; while(p!=NULL) { cout<<p->val; p=p->next; } q=daoshu(head,2); //倒数第2个 cout<<endl<<q->val; return 0; }