zoukankan      html  css  js  c++  java
  • 链表的删除(3)

    步骤如下:

    • 情况1:删除链表内的第一个结点

            只需将链表结构指针只需下一个结点。

    • 情况2:删除链表内的最后一个结点

           只要将指向最后一个结点的结构指针指向NULL。

    • 情况3:删除链表内的中间结点

           只要将删除结点的结构指针,指向删除结点后的下一个结点。

       

    链表内结点删除

    /*------------链表内结点的删除-------------*/

    #include
    "stdio.h"
    #include
    "stdlib.h"

    struct llist
    {
    int num;
    struct llist *next;

    };
    typedef
    struct llist node;
    typedef node
    *llink;


    /*------------链表的输出----------*/

    void printfllist( llink ptr)
    {
    while (ptr!=NULL)
    {
    printf(
    "[%d]",ptr->num);
    ptr
    =ptr->next;

    }
    printf(
    "\n");
    }

    /*--------链表的创建--------*/

    llink createllist(
    int *array ,int len)
    {
    llink head;
    llink ptr,ptr1;
    int i;


    /*------创建第一个结点------*/

    head
    =(llink)malloc(sizeof(node));
    if(!head)
    return NULL;
    head
    ->num=array[0];
    head
    ->next=NULL;
    ptr
    =head;
    for(i=1;i<len;i++)
    {
    ptr1
    =(llink)malloc(sizeof(node));
    if(!ptr1)
    return NULL;
    ptr1
    ->num=array[i];
    ptr1
    ->next=NULL;
    ptr
    ->next=ptr1;
    ptr
    =ptr->next;
    }
    return head;
    }
    /*-----链表的结点遍历-----*/
    llink findnode(llink head,
    int num)
    {
    llink ptr;
    ptr
    =head; //指向链表起始
    while(ptr!=NULL) //遍历链表
    {
    if(ptr->num==num) //查找编号
    return ptr;
    ptr
    =ptr->next; //指向下一个结点
    }
    return ptr;
    }


    /*------链表的结点删除--------*/

    llink deletenode( llink head,llink ptr)
    {

    llink previous;
    //指向前一节点

    if(ptr==head) //是否是链表开始
    /*--情况1: 删除第一个结点--*/

    return head->next; //输入第二节点指针
    else
    {
    previous
    =head;
    while(previous->next!=ptr) //找结点ptr的前结点
    previous=previous->next;

    if(ptr->next==NULL) //是否是链表结束
    /*--情况2:删除最后一个结点--*/
    previous
    ->next=NULL; //最后一个结点
    else
    /*--情况3:删除中间结点--*/

    previous
    ->next=ptr->next; //中间结点

    }
    return head;

    }


    /*-----删除结点-----*/

    int main()
    {
    int llist[6]={1,2,3,4,5,6};

    llink head,ptr;
    int num; //邮寄编号变量

    head
    =createllist(llist,6);
    if(!head)
    {
    printf(
    "内存分配失败!\n");
    exit(
    1);
    }
    printf(
    "原来的链表: "); //输出原来的链表

    printfllist(head);
    while(1)
    {
    printf(
    "请输入要删除的邮寄编号 ==>");
    scanf(
    "%d",&num); //读取邮编号
    if(num!=-1)
    {
    ptr
    =findnode(head,num); //查找邮编号
    if(!ptr) //是否找到
    printf("没有找到\n");
    else
    {
    head
    =deletenode(head,ptr); //删除此结点
    printf("删除后链表:"); //输出删除后链表
    printfllist(head);
    }
    }
    else
    exit(
    1); //借书离开
    }
    }
  • 相关阅读:
    实战之中兴ZXHN F460光猫破解超级密码+开启无线路由功能
    彻底弄懂css中单位px和em,rem的区别
    IntelliJ 2016.02设置maven 阿里云加速
    Mac 下 Intellij IDEA 2016.1.2+maven+jetty+ JRebel 6.4.3 破解+spring mvc
    javascript createElement ttf
    Spring MVC 4.2 增加 CORS 支持 Cross-Origin
    Maven根据不同个环境打包, 获取不同的配置文件等等
    HTML5播放器
    spring mvc 4数据校验 validator
    osx 文本编辑工具下载地址Sublime Text 3
  • 原文地址:https://www.cnblogs.com/FCWORLD/p/1881586.html
Copyright © 2011-2022 走看看