7-1 C语言程序设计 实验6-3 单向链表的插入 (30 分)

单向链表的插入

  • 指针的定义,就要用malloc而且还得检查
  • //打印链表 如果链表是空的 就可以打印换行
  • 总结
    • 1. 头指针是不是只有一个
    • 2.头指针是不是为空
    • 3.不能 用空指针访问哦

7-1 C语言程序设计 实验6-3 单向链表的插入 (30 分)_第1张图片

#include 
#include 
struct link
{
    int data;
    struct link *next;
};

struct link *AppendNode(struct link *head,int data);
void DisplyNode(struct link *head);
void DeleteMemory(struct link *head);
struct link * DeleteNode(struct link *head,int data);
struct link *InsertNode(struct link *head, int nodeData);

int main()
{
    char    c;
    int data = 0;
    struct link *head = NULL;      /* 链表头指针 */
    while (1)
    {
        scanf("%d",&data);
        if (data==-1)
            break;

        head = AppendNode(head,data);/* 向head为头指针的链表末尾添加节点 */
    }
    DisplyNode(head);        /* 显示当前链表中的各节点信息 */
    scanf("%d",&data);
    head = InsertNode(head,data);
    DisplyNode(head);        /* 显示当前链表中的各节点信息 */
    DeleteMemory(head);           /* 释放所有动态分配的内存 */
    return 0;
}


struct link* AppendNode(struct link* head, int data)
{
    //sizeof
    struct link* node = (struct link*)malloc(sizeof(struct link));
    //malloc 检查
    if (node == NULL)
    {
        //打印错误原因的一个方式
        exit(-1);
        //Not enough space
    }
    //为什么要用malloc -》 野指针
    node->data = data;
    node->next = NULL;
    //头插的话,看是否是头
    if (head == NULL)
    {
        head = node;
    }
    else
    {
        struct link* tail = head;
        while (tail->next != NULL)
        {
            tail = tail->next;
        }
        tail->next = node;
    }
    return head;
}


void DisplyNode(struct link* head)
{
    //打印链表 如果链表是空的 就可以打印换行
    if(head == NULL)
    {
		printf("\n");
        return;
    }
    struct link* cur = head;
    while (cur->next)
    {
        printf("%d->", cur->data);
        cur = cur->next;
    }
    printf("%d\n",cur->data);
}

void DeleteMemory(struct link* head)
{
    free(head->next);
    head->next = NULL;
}

struct link* DeleteNode(struct link* head, int data)
{
    struct link* cur = head;
    while(head->data == data)
    {
        head= head -> next;
    }
    cur = head;
    while(cur->next)
    {
        if(cur->next->data == data)
            cur -> next = cur -> next -> next;
        else cur = cur->next;
    }

    return head;
}

struct link *InsertNode(struct link *head, int nodeData)
{
   //sizeof
    struct link* node = (struct link*)malloc(sizeof(struct link));
    //malloc 检查
    if (node == NULL)
    {
        //打印错误原因的一个方式
        exit(-1);
        //Not enough space
    }
    node->data = nodeData;
    node->next = NULL;
    if(head == NULL)
    {
        head = node;
        return head;
    }
    if(head->data > nodeData)
    {
        node->next = head;
        return node;
    }
   
    struct link* cur = head;
    while(cur)
    {
                if(cur->next == NULL)
        {
            cur->next = node;
            return head;
        }
        if(cur->next->data > nodeData)
        {
            node->next = cur->next;
            cur->next = node;
            break;
        }

        cur = cur->next;
    }
    return head;
}

指针的定义,就要用malloc而且还得检查

 struct link* node = (struct link*)malloc(sizeof(struct link));
    //malloc 检查
    if (node == NULL)
    {
        //打印错误原因的一个方式
        exit(-1);
        //Not enough space
    }

//打印链表 如果链表是空的 就可以打印换行

if(head == NULL)
{
	printf("\n");
    return;
}

总结

1. 头指针是不是只有一个

2.头指针是不是为空

3.不能 用空指针访问哦

你可能感兴趣的:(c语言)