鱼C论坛

 找回密码
 立即注册
查看: 2456|回复: 2

请教小甲鱼视频中的快慢指针问题

[复制链接]
发表于 2020-3-2 08:53:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-2 09:27:53 | 显示全部楼层
  while用numb来终止,
mid也要赋值,不然mid一直指的都是头结点,所以值一直为头结点的值
while(search->next->num){
                 if(search->next->next){
                         search=search->next->next;
                         mid = mid->next;
                  }else {
                          search=search->next;
                  }
                    
          }
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-4 16:05:33 | 显示全部楼层
ByTime 发表于 2020-3-2 09:27
while用numb来终止,
mid也要赋值,不然mid一直指的都是头结点,所以值一直为头结点的值
while(search- ...

改了 但是还是没出结果
#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->num){
                 if(search->next->next){
                         search=search->next->next;
                         mid=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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-19 12:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表