数据结构------链表创建与输出

一下是自己学习并编写的链表的创建和输出过程,简单易懂。

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

struct ListNode
{
    int data;
    struct ListNode *next;
};

typedef struct ListNode list;

list *createList(int b)
{
    int i,a;
    list *head=NULL,*curNode=NULL,*tailNode=NULL; //此处除head,我们创建两个指针curNode和tailNode
                                                  //curNode总是指向当前创建的节点,tailNode总是指向链表的结尾
    for(i=0;i<b;i++)
    {
        curNode=(list *)malloc(sizeof(struct ListNode)); //申请内存空间并判断是否成功
        if(NULL==curNode)
        {
            printf("Allocate  memry failed......");
            break;
        }

        printf("请输入链表中的第%d个数:",i);      //输入链表中的数并把值赋给刚创建的curNode节点
        scanf("%d",&a);
        curNode->data=a;

        if(head==NULL)                              //这个循环只执行一次,目的就是为了定位头节点,以便使头节点一直指向第一个节点。
        {
            head=curNode;
            tailNode=curNode;
        }
        else
        {
            tailNode->next=curNode;            //移动节点指针的时候一定要注意移动的先后顺序,比如此处
            tailNode=curNode;
        }
    }
    tailNode->next=NULL;
    return head;

}

int main(void)
{
    int n;
    list *newNode=NULL;

    printf("输入要创建链表的长度:");
    scanf("%d",&n);

    newNode=(list *)malloc(sizeof(struct ListNode));
    newNode=createList(n);

    while(newNode)
    {
        printf("%d",newNode->data);
        newNode=newNode->next;
    }
    printf("\n");
    free(newNode);          //有malloc就一定有free,不用了一定要归还系统
    return 0;
}

一定要记住链表创建的步骤,理解每一步

posted @ 2012-10-02 16:38  foundwant  阅读(384)  评论(0编辑  收藏  举报