单链表结点删除

摘要:
单个链接列表节点删除此问题需要两个功能,一个是将读入的数据存储为单个链接列表,另一个是删除链接列表中存储了给定值的所有节点。列表节点定义如下:structListNode{intdata;ListNode*next;};函数接口定义:structListNode*readlist();structListNode*删除项;readlist函数从标准输入中读取一系列正整数,并根据读取顺序创建单个链接列表。当读取1时,表示输入结束。该函数应返回指向单链标头节点的指针。裁判测试程序示例:#include #include<stdlib h>structListNode{intdata;structListNode*next;};structListNode*readlist();structListNode*删除项;voidprintlist{structListNode*p=L;而{printf;p=p-˃next;}printf(“”);}intmain(){intm;structListNode*L=readlist();scanf;L=deletem(L,m);printlist;return0;}/*代码将嵌入此处*/˃输入示例:1011101210-110输出示例:1112执行代码如下:structListNode*p,*tail,*head=NULL;而{scanf;ifbreak;p=malloc;p-˃data=a;p-˃next=NULL;ifhead=p;elsetail-˃next=p;tail=p;}返回头;}structListNode*deletem{structListNode*p,*p1,*p2,*t;while(L!
单链表结点删除

本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中所有存储了某给定值的结点删除。链表结点定义如下:

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

函数接口定义:

struct ListNode *readlist();

struct ListNode *deletem( struct ListNode *L, int m );

函数readlist从标准输入读入一系列正整数,按照读入顺序建立单链表。当读到−1时表示输入结束,函数应返回指向单链表头结点的指针。
函数deletem将单链表L中所有存储了m的结点删除。返回指向结果链表头结点的指针。

裁判测试程序样例:

 #include <stdio.h>
    #include <stdlib.h>
    struct ListNode {
        int data;
        struct ListNode *next;
    };
    struct ListNode *readlist();
    struct ListNode *deletem( struct ListNode *L, int m );
    void printlist( struct ListNode *L )
    {
         struct ListNode *p = L;
         while  {
               printf("%d ", p->data);
               p = p->next;
         }
         printf("
");
    }
    int main()
    {
        int m;
        struct ListNode *L = readlist();
        scanf("%d", &m);
        L = deletem(L, m);
        printlist(L);
        return 0;
    }
    /* 你的代码将被嵌在这里 */>

输入样例:

10 11  10  12  10  -1

10

输出样例:

11   12

执行代码如下所示

            struct ListNode *p,*tail,*head=NULL;
            while(1){
                scanf("%d",&a);
                if(a==-1) break;
                p=(struct ListNode *)malloc(sizeof(struct ListNode));
                p->data=a;
                p->next=NULL;
                if(head==NULL) head=p;
                else tail->next=p;
                tail=p;
            }
            return head;
        }
        
        struct ListNode *deletem( struct ListNode *L, int m )
        {
            struct ListNode *p,*p1,*p2,*t;
            while(L!=NULL&&L->data==m){
                p=L;
                L=L->next;
                free(p);
            }
            if(L==NULL) return NULL;
            p1=L;
            p2=L->next;
            while(p2){
                if(p2->data==m) {
                    p1->next=p2->next;
                    free(p2);
                }
                else p1=p2;
                p2=p1->next;
            }
            return L;
        }

免责声明:文章转载自《单链表结点删除》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇二、Shell变量大整数乘法的5种方法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

HashMap之原理及死锁

一、HashMap原理 1.HashMap的本质就是数组和链表。table是一个entry数组,每一个数组元素保存一个Entry节点,而Entry节点内部又连接着同样key的下一个Entry节点,就构成了链表。. 详情见 HashMap源码分析 2.HashMap死锁原因: HashMap会造成死锁,因为HashMap是线程非安全的,多并发的情况...

Windows窗口的层次关系(转)

今天看到这篇文章,觉得蛮有用的,我之前也对这个不大了解,特转载此处. 转载地址:http://www.51testing.com/html/200804/n80848.html 在Window 的图形界面下,最基本显示信息的元素就是窗口,每一个Window 窗口都管理着自己和其他窗体之间的关系和自身的一些信息,如:是否可见,窗口的所有者,窗口的父/子关系等...

数据结构之线性表的链式存储结构

一、基本概念 链式存储 :用一组任意的存储单元存储线性表中的数据元素。用这种方法存储的线性表简称线性链表。存储链表中结点的一组任意的存储单元可以 是连续的,也可以是不连续的,甚至是零散分布在内存中的任意位置上的。 为了正确表示结点间的逻辑关系,在存储每个结点值的同时,还必须存储指示其直接后继结点的地址(或位置),称为指针(pointer)或链(link),...

最大堆(优先队列)基本概念,即一个完整建立,插入,删除代码

堆(优先队列)priority queue特殊的队列,取出元素的顺序是依照元素的优先权(关键字)大小,而出元素进入队列的先后顺序操作:查找最大值(最小值),删除(最大值) 数组:链表:有序数组:有序链表: 采用二叉搜索树? NO 采用完全二叉树 YES堆的连个特性结构性:用数组表示的完全二叉树:有序性:任一结点的关键字是其字树所有结点的最大值(或最小值)...

执行程序的内存分布总结

以下内容为各方资料汇总 所以逻辑顺序不大清晰 一般认为在c中分为这几个存储区:     1. 栈--有编译器自动分配释放         2. 堆--一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收         3. 全局区(静态区)-- 全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的...

数据结构(二):链表、链队列

上一篇博文中主要总结线性表的顺序存储结构实现,比如顺序表、顺序队列和顺序栈。具体可以参考上篇博文 http://blog.csdn.net/lg1259156776/article/details/46993591 下面要进行学习和总结的是线性表的链式存储结构实现,比如链表和链队列。 顺序存储结构的优缺点优点是逻辑相邻,物理相邻,可随机存取任一元素,存...