zoukankan      html  css  js  c++  java
  • create 函数用传指针方式没法创建链表?

     1 //create 函数用传指针方式没法创建链表?
     2 
     3 #include<stdio.h>
     4 #include<stdlib.h>
     5 struct Person
     6 {
     7     int num;
     8     struct Person *next;
     9 };
    10 
    11 int main()
    12 {
    13     struct Person* p=NULL;
    14     int n,m;
    15     scanf("%d%d",&n,&m);
    16     void create(struct Person*,int);    //用 struct Person* create(int);就可以
    17     int Yue(struct Person*,int,int);
    18     create(p,n);                        //改为p=create(n);就可以
    19     printf("%d
    ",Yue(p,n,m));
    20     return 0;
    21 }
    22 
    23 void create(struct Person* p,int n)        //问题:为什么这种方式不能成功创建新链表?
    24 {
    25     struct Person *p1,*p2;                //改为:struct Person *head,*p1,*p2;
    26     p1=(struct Person *)malloc(sizeof(Person));
    27     int i=0;
    28     while(i<n)
    29     {
    30         i++;
    31         p1->num=i;
    32         if(i==1) p=p2=p1;                //改为:if(i==1) head=p2=p1;
    33         else
    34         {
    35             p2->next=p1;
    36             p2=p1;
    37         }
    38         p1=(struct Person *)malloc(sizeof(Person));
    39     }
    40     p2->next=NULL;
    41     free(p1);
    42     p1=NULL;
    43                                         //加一行:return head;
    44 }
    45 
    46 int Yue(struct Person* p,int n,int m)
    47 {
    48     int i=0,j=1,k=0;
    49     struct Person *q,*r;
    50     q=r=p;
    51     while(k<n-1)
    52     {
    53         i++;
    54         j++;
    55         
    56         if(i!=1) r=r->next;
    57         if(r==NULL) r=p;
    58         
    59         q=q->next;
    60         if(q==NULL) q=p;
    61         
    62         if(j==m)
    63         {
    64             j=1;
    65             k++;
    66             if(q==p)
    67             {
    68                 p=p->next;
    69                 q->next=NULL;
    70                 free(q);
    71                 q=p;
    72             }
    73             else if(q->next==NULL)
    74             {
    75                 r->next=NULL;
    76                 free(q);
    77                 q=p;
    78             }
    79             else
    80             {
    81                 r->next=q->next;
    82                 free(q);
    83                 q=r->next;
    84             }
    85         }
    86     }
    87     return q->num;
    88 }
  • 相关阅读:
    swift
    swift
    swift
    swift
    swift
    swift
    swift
    选择排序
    组合 和 继承
    Android中使用LitePal操控SQLite数据库
  • 原文地址:https://www.cnblogs.com/bboykaku/p/12524378.html
Copyright © 2011-2022 走看看