链表,结构体,指针,CG作业. 倒数第k个元素,已知带头结点的非空单链表中存放着若干整数,请找出该链表中倒数第k个元素
CG题总是喜欢让我们填一个空==
先写着,等我熟练了再来整理
1 #include <iostream> 2 using namespace std; 3 struct Node { 4 int data; 5 Node *next; 6 }; 7 typedef Node *LinkList; 8 void createList(LinkList &L,int n) { 9 Node *p,*r; 10 L=new Node; 11 L->next=NULL; 12 r=L; 13 for(int i=1; i<=n; i++) { 14 p=new Node; 15 cin>>p->data; 16 r->next=p; 17 r=p; 18 } 19 r->next=NULL; 20 } 21 void printList(LinkList L) { 22 Node *p; 23 p=L->next; 24 while(p) { 25 cout<<p->data<<" "; 26 p=p->next; 27 } 28 cout<<endl; 29 }
//CG里就只让我写了这一小段 30 Node * getElem(LinkList &L,int k){ 31 //求表长 32 Node *p; 33 p=L->next; 34 int M=0; 35 while(p!=NULL){ 36 M++; 37 p=p->next; 38 } 39 if(k>M)return NULL; 40 else{int i=1; 41 p=L->next; 42 while(p!=NULL&&i<=(M-k)){ 43 p=p->next; 44 i++;//cout<<"*"; 45 } 46 47 return p; 48 } 49 } 50 //到这是一个分界线========================================== 51 int main() { 52 LinkList L; 53 int m,k; 54 cin>>m;//单链表中元素个数 55 createList(L,m);//尾插入法创建带头节点的单链表 56 cin>>k; 57 Node *p=getElem(L,k);//找单链表中倒数第k个元素 58 if(p) 59 cout<<p->data; 60 else 61 cout<<"no"; 62 return 0; 63 }