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

/*
描述:创建一个带头结点的单链表,在单链表中删除值相同的多余结点,并遍历链表,删除链表最大节点。
输入:从键盘上输入数据元素个数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; }
原文地址:https://www.cnblogs.com/zhaohuan1996/p/11834130.html