风骚的小胖子。 发表于 2018-10-12 13:07:56

单链表尾插法

#include<stdlib.h>
#include<string.h>
#include <stdio.h>
#include <malloc.h>

struct Book
{
    char a;
    struct Book *next;
};

struct Book *initList(char *a)
{
    struct Book *p=(struct Book *)malloc(sizeof(struct Book));
    strcpy(p->a,a);
    p->next = NULL;
    return p;
}

void append(struct Book *head, char *a)
{
    struct Book *p = head;
    struct Book *pNew = (struct Book *)malloc(sizeof(struct Book));
      while(p->next)
                p = p->next;       //这个是循环定位尾部。还有个是小甲鱼老师说的指针定位法。我想学习下这个指针法。
      strcpy(pNew->a, a);
    pNew->next = p->next;
    p->next = pNew;
}

void printList(struct Book *head)
{
    struct Book *p = head;
    while(p)
    {
      printf("%s",p->a);
      p = p->next;
    }
}

int main(void)
{
    struct Book *p = initList("ABC");
    append(p,"DEF");
    append(p,"GHI");
    printList(p);
    return 0 ;
}

风骚的小胖子。 发表于 2018-10-12 13:11:10

本帖最后由 风骚的小胖子。 于 2018-10-12 13:19 编辑

#include<stdlib.h>
#include<string.h>
#include <stdio.h>
#include <malloc.h>

struct Book
{
      char a;
      struct Book *next;
};

struct Book *list()
{
      struct Book *p1=(struct Book *)malloc(sizeof(struct Book));
      p1->next=NULL;
      return p1;

}

struct Book *xinlist(char *a)
{
      struct Book *p2=(struct Book *)malloc(sizeof(struct Book));
//      p2->a=a;
      strcpy(p2->a,a);
      p2->next=NULL;
      return p2;
}

void lianjie(struct Book *p1,char *a)
{
      struct Book *p3=xinlist(a);   // <--------
         static struct Book *p4;
         p1->next=p4;                   //我写的指针定尾。错的 !!就根据我的代码能否实现指针定位?可以的话帮我改下。不可以的话那为什么小甲鱼老师的那个可以呢?单链表分为有头单链表和无头单链表或者就是说有头单链表不可以实现指针定位?
      p4->next=p3;
      p3->next=NULL;
                              // p3->next=p1->next;
                              // p1->next=p3;
       p4=p3;
}

void dayin(struct Book *p1)
{
      struct Book *p4=p1->next;
      while(p4!=NULL)
      {
                printf("%s",p4->a);
                p4=p4->next;
      }

}

int main(void)
{
      struct Book *p=list();
      lianjie(p,"ABC");
      lianjie(p,"DEF");
      lianjie(p,"GHI");
      dayin(p);
      return 0 ;
}

claws0n 发表于 2018-10-12 13:33:33

风骚的小胖子。 发表于 2018-10-12 13:11
#include
#include
#include


#include <stdio.h>
#include<stdlib.h>
#include<string.h>

struct Book
{
    char a;
    struct Book *next;
};

struct Book *initList(char *a)
{
    struct Book *p=(struct Book *)malloc(sizeof(struct Book));
    strcpy(p->a,a);
    p->next = NULL;
    return p;
}

void append(struct Book *head, char *a)
{
    struct Book *p = head;
    struct Book *pNew = (struct Book *)malloc(sizeof(struct Book));
    while(p->next)               // <------------------------------------------------------重点,尾插法需要遍历
      p = p->next;
    strcpy(pNew->a, a);
    pNew->next = p->next;
    p->next = pNew;
}

void printList(struct Book *head)
{
    struct Book *p = head;
    while(p)
    {
      printf("%s",p->a);
      p = p->next;
    }
}

int main(void)
{
    struct Book *p = initList("ABC");
    append(p,"DEF");
    append(p,"GHI");
    printList(p);
    return 0 ;
}
页: [1]
查看完整版本: 单链表尾插法