• 创建一个带头结点的单链表,逆置链表,在单链表中删除值相同的多余结点,并遍历链表,删除链表最大节点。


    /*
    描述:创建一个带头结点的单链表,在单链表中删除值相同的多余结点,并遍历链表,删除链表最大节点。
    输入:从键盘上输入数据元素个数n和对应n个元素。
    输出:输出删除多余结点的单链表序列。
    输入样例:6 3 1 3 4 4 5--7个
    输出样例:3 1 4 5
    */
    #include <stdio.h>
    #include<string.h>
    #include <stdlib.h>
    #include <malloc.h>
    typedef struct Node{
        int data;
        struct Node *next;
    }LinkList;
    void create(LinkList *&L,int a[],int n){
        int i;
        LinkList *s,*r;
        L=(LinkList *)malloc(sizeof(LinkList));
        r=L;
        for(i=0;i<n;i++){
            s=(LinkList *)malloc(sizeof(LinkList));
            s->data=a[i];
            r->next=s;
            r=s;
        }
        r->next=NULL;
    }
    /*在单链表中删除值相同的多余结点*/
    

      void deleteLinkList(LinkList *&L){
          LinkList *p=L->next,*s,*q;
          while(p!=NULL){
             q=p;
             while(q->next!=NULL){
                if(q->next->data==p->data){
                    s=q->next;
                    q->next=s->next;
                    free(s);
                }
                q=q->next;
             }
             p=p->next;
          }
    }

    /*删除链表最大节点*/
    bool deleteMax(LinkList *&L){
        LinkList *pre=L,*p=L->next,*maxpre=pre,*maxp=p;
        while(p!=NULL){
            if(p->data>maxp->data){
                maxpre=pre;
                maxp=p;
            }
            pre=p;
            p=p->next;
        }
        if(maxpre==NULL||maxp==NULL){return false;}
        maxpre->next=maxp->next;
        free(maxp);
        return true;
    }

    /*对链表进行插入排序*/
    void is(LinkList *&L){
        LinkList *p=L->next->next,*pre,*s;
        L->next->next=NULL;
        while(p){
            s=p->next;
            p->next=NULL;
            pre=L;
            while(pre->next!=NULL&&pre->next->data<p->data){
                pre=pre->next;
            }
            p->next=pre->next;
            pre->next=p;
            p=s;
        }
    }
    
    
    

      

    /*
    逆置链表
    */
    void reverseLinkList(LinkList *&L){
        LinkList *p=L->next,*s;
        L->next=NULL;
        while(p){
            s=p->next;
            p->next=L->next;
            L->next=p;
            p=s;
        }
    }

    /*遍历输出链表*/ void print(LinkList *L){ LinkList *p=L->next; while(p!=NULL){ printf("%d ",p->data); p=p->next; } printf(" "); } int main() { int n,i; LinkList *L; scanf("%d",&n); int a[n]; for(i=0;i<n;i++){ scanf("%d",&a[i]); } create(L,a,n); deleteLinkList(L); if(deleteMax(L)){ print(L); } return 0; }
  • 相关阅读:
    堪称为经典游戏设计帖整理20个点击回复超高的精品贴
    【专题报道】Google I/O开发者大会
    android用户界面之AlarmManager教程实例汇
    Android2.2 API 中文文档系列
    ruby设计模式之【观察者】模式2————更加一般化的观察者模式
    ruby中require和load的区别
    ruby/python/java全覆盖的SeleniumWebdriver系列教程(1)————快速开始
    ruby + nokogiri实现将天涯易读全帖转换成txt文件的功能
    WatirWebdriver与watir1.x的差异
    Notepad++ 的一些常用快捷键
  • 原文地址:https://www.cnblogs.com/zhaohuan1996/p/11834130.html
Copyright © 2020-2023  润新知