设为首页 加入收藏

TOP

链表(单向链表的建立、删除、插入、打印)(三)
2019-08-13 05:39:26 】 浏览:155
Tags:链表 单向 建立 删除 插入 打印
if (nodeData == p->data)
    {
        if (p == head)    /* 如果待删除为头节点 (注意头指针和头结点的区别)*/
        {
            head = p->next;
        }
        else            /* 如果待删除不是头节点 */
        {
            pr->next = p->next;
        }
        free(p);        /* 释放已删除节点的内存 */
    }
    else            /* 未发现节点值为nodeData的节点 */
    {
        printf("This Node has not been found");
    }


    return head;
}


9、单向链表的插入


向链表中插入一个新的节点时,首先由新建一个节点,将其指针域赋值为空指针(p->next = NULL),然后在链表中寻找适当的位置执行节点的插入操作,


此时需要考虑以下四种情况:


    1.若原链表为空,则将新节点p作为头节点,让head指向新节点p(head = p)


     2.若原链表为非空,则按节点值的大小(假设节点值已按升序排序)确定插入新节点的位置,若在头节点前插入新节点,则将新节点的指针域指向原链表的头节点(p->next = head),且让head指向新节点(head =p)


    3.若在链表中间插入新节点,则将新节点的指针域之下一节点(p->next = pr -> next),且让前一节点的指针域指向新节点(pr->next = p)


    4.若在表尾插入新节点,则末节点指针域指向新节点(p->next = p)


单向链表的插入操作实现


/* 函数功能:向单向链表中插入数据 按升序排列*/
struct link *InsertNode(struct link *head, int nodeData)
{
    struct link *p = head, *pr = head, *temp = NULL;


    p = (struct link *)malloc(sizeof(struct link));
    if (p == NULL)
    {
        printf("No enough meomory!\n");
        exit(0);
    }
    p->next = NULL;        /* 待插入节点指针域赋值为空指针 */
    p->data = nodeData;


    if (head == NULL)    /* 若原链表为空 */
    {
        head = p;        /* 插入节点作头结点 */
    }
    else        /* 原链表不为空 */
    {
        while (pr->data < nodeData && pr->next != NULL)
        {
            temp = pr;        /* 保存当前节点的指针 */
            pr = pr->next;    /* pr指向当前节点的下一节点 */
        }
        if (pr->data >= nodeData)
        {
            if (pr == head)        /* 在头节点前插入新节点 */
            {
                p->next = head;    /* 新节点指针域指向原链表头结点 */
                head = p;        /* 头指针指向新节点 */
            }
            else
            {
                pr = temp;
                p->next = pr->next;        /* 新节点指针域指向下一节点 */
                pr->next = p;            /* 让前一节点指针域指向新节点 */
            }
        }
        else        /* 若在表尾插入新节点 */
        {
            pr->next = p;    /* 末节点指针域指向新节点*/
  &nb

首页 上一页 1 2 3 4 5 下一页 尾页 3/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C语言 栈(链式栈) 下一篇C语言 队列(循环队列)

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目