光说不练
老师问List *FindKth( int K, List *PtrL )
{ List *p = PtrL;
int i = 1;
while (p !=NULL && i < K ){
p = p->Next;
i++;
}
if(i == K) return p; /*找到第K个,返回指针*/
else return NULL; /* 否则返回空 */
}
中的判断语句改为:
if (p==NULL) return NULL;
else return p;
或者说直接简化为:return p;
这样是否正确,讨论的人多就是没人写代码,自己写了个,虽然不知道有没有错。
程序代码:
#include<stdio.h> #include<stdlib.h> struct node { int data; struct node *next; }; typedef struct node lnode; typedef struct node *list; list creat()//尾插法建立带表头的链表 { list tempnode,head; list s; int i,N,a;//共N个元素 printf("请输入元素个数\n"); scanf("%d",&N); head=(list)malloc(sizeof(lnode)); head->next=NULL; printf("请输入数据\n"); for(i=1;i<=N;i++) { scanf("%d",&a); tempnode=(list)malloc(sizeof(lnode)); tempnode->data=a; tempnode->next=NULL; if(head->next==NULL) head->next=tempnode; else s->next=tempnode; s=tempnode; } return head; } //按序号查找,第K个元素 list find(int k,list head) { int i=1; list p=head; while(i<k&&p->next!=NULL)//表不为空,并且未找到k { p=p->next; i++; } if(i==k) return p->next; else return NULL; } //按序号查找第k个元素,第二种形式 list find_2(int k,list head) { int i=1; list p=head; while(i<k&&p->next!=NULL)//表不为空,并且未找到k { p=p->next; i++; } if(p->next==NULL) return NULL; else return p->next; } list find_3(int k,list head) { int i=1; list p=head; while(i<k&&p->next!=NULL)//表不为空,并且未找到k { p=p->next; i++; } return p->next; } void output(list head) { list s=head; while(s->next!=NULL) { printf("%d ",s->next->data); s=s->next; } printf("\n"); } void main() { list head,s; int k; head=creat(); printf("请输入查找序号\n"); scanf("%d",&k); printf("输出该链表\n"); output(head); s=find(k,head); printf("第一种查找方式输出第k个结点的数据\n"); printf("%d\n",s->data); //输出第k个结点的数据 s=find_2( k,head); printf("第二种查找方式输出第k个结点的数据\n"); printf("%d\n",s->data); s=find_3( k,head); printf("第三种查找方式输出第k个结点的数据\n"); printf("%d\n",s->data); }