|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
第一个函数是创建单向链表 第二个函数就是快慢指针法求链表中间元素 为啥我编译并运行后并没有输出中间元素呢?
程序如下:
#include<stdio.h>
#include<stdlib.h>
#define N sizeof(node)
typedef struct Node{ //构造结构体
int num;
struct Node *next;
}node,pnode; //node pnode其实都代表struct Node 结构体
int n=0;
node* creat(void){ //创建单向动态链表
pnode* p1,*p2,*head;
p1=p2=(node*)malloc(N); //创建第一个节点
scanf("%d",&p1->num); //输入第一个节点的数据
head=NULL; //创建链表前都要让头指针为NULL
while(p1->num!=0){ //判断输入的数据是否有效 若为0则结束链表
n=n+1;
if(n==1){
head=p1; //输入第一个有效数据后将头指针head指向链表第一个节点
}
p1=(node*)malloc(N); //创建第二个节点 此时p1指向第二个节点
p2->next=p1; // 此时p2还是指向第一个节点 将第一个节点的指针指向第二个节点
p2=p1; //再让p2进入第二个节点
scanf("%d",&p1->num); //输入第二个节点的数据
}
p2->next=NULL; //结束后让末尾的节点指针指向NULL
free (p1);
return head;
}
/*求链表的中间节点(利用快慢指针)*/
int Getmidnode(node*head){
node* mid,*search;
int e;
mid=search=head;
while(search->next){
if(search->next->next){
search=search->next->next;
mid->next;
}else {
search=search->next;
}
}
e=mid->num;
return e;
}
int main(){
node* p;
p=creat();
printf("链表建立完成");
printf("mid=%d",Getmidnode(p)); //输出链表中间节点元素
return 0;
} |
|