zoukankan      html  css  js  c++  java
  • 设计一个算法,从头节点为L的带表头节点的有序单链表中删除所有数值相同的多余元素并释放节点空间

    //问题:设计一个算法,从头节点为head的带表头节点的有序单链表中删除所有数值相同的多余元素并释放节点空间
    //思路:单链表已经有序,定义n等于链表的第一个值,向后遍历,若往后有数值相等的,就删除该节点,若遇到数值不相等的,就把值赋给n,这样一直向后

    #include "stdio.h"
    #include<stdlib.h>
    typedef struct Node{    //结构体
        int data;
        Node *next;
    }Node;
    void init(Node *&p);
    void listCreate(Node *&p,int n);
    void Traversal(Node *&p);


    //**********核心算法代码******************
    void deleteSame(Node *&h){
        Node *p=h->next;
        Node *q = p->next;   //q永远是p的后继
        int a;
        while(q!=NULL){
            a=p->data;
            if(a==q->data){     //若前一个节点的值等于后一个节点的值
                p->next=q->next;   //逻辑删除该节点,并使被删除节点前后连接
                free(q);           //释放该节点的空间(彻底删除节点)
                q=p->next;         //由于q此时是个空指针,所以重新让它称为p的后继
            }else{              //不等
                p=p->next;      //p往后
                q=q->next;      //q往后
            }        
        } 
    }
    //*****************************************

    int main(){
        Node *head = (Node *)malloc(sizeof(Node));
        init(head);
        int a[] ={1,2,3,3,3,4,5,6,6,7,8,9}; 
        //int a[] = {1,2,3,4,5,6,7,8,9,10,11,12};
        for(int i=0;i<12;i++){
            listCreate(head,a[i]);
        }
        deleteSame(head);
        Traversal(head);
        //printf("%d",head->data);
        getchar();
        return 0;
    }
    void init(Node *&p){    //初始化
        p->next = NULL;
    }

    void listCreate(Node *&p,int n){      //参数:头节点,数据
        Node *q = (Node *)malloc(sizeof(Node));
        //****头插法建立(插入)链表*********(后进先出)
        q->data = n;
        q->next = p->next;
        p->next = q;
        //****************
    }

    void Traversal(Node *&p){   //遍历
        Node *q = p->next;
        while (q != NULL)
        {
            printf("%d ",q->data);
            q = q->next;
        }
    }
  • 相关阅读:
    20172314 2017-2018-2 《程序设计与数据结构》第七周学习总结
    20172314 2017-2018-2 《程序设计与数据结构》第六周学习总结
    20172314 2017-2018-2 《程序设计与数据结构》第5周学习总结
    20172314 2017-2018-2 《程序设计与数据结构》实验报告一
    20172314 2017-2018-2 《程序设计与数据结构》 第三周学习总结
    20172314 2017-2018-2 《程序设计与数据结构》第一周学习总结
    预备作业03
    学号 2017-2018-20172309 《程序设计与数据结构》第3周学习总结
    # 学号 2017-2018-20172309 《程序设计与数据结构》实验1报告
    第二 周作业总结
  • 原文地址:https://www.cnblogs.com/BreezeFeng/p/13955633.html
Copyright © 2011-2022 走看看