![]() |
#2
诸葛欧阳2015-09-24 23:44
|
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);
}
#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);
}