noj05单链表的删除

在这里插入图片描述
在这里插入图片描述
单链表的删除

#include <stdio.h>
#include <stdlib.h>

typedef struct Node{
     int data;
     struct Node* next;
}Node,*ListNode;

void CreatList(ListNode name,int n){
      ListNode temp=name;
      ListNode p;
      for(int i=0;i<n;i++)
      {
          p=(ListNode)malloc(sizeof(ListNode));
          temp->next=p;
          temp=temp->next;
      }
      temp->next=NULL;
}

ListNode CompareList(ListNode a,ListNode b){
     ListNode head=(ListNode)malloc(sizeof(ListNode));
     ListNode temp=head,p;
     ListNode aa=a->next;
     ListNode bb=b->next;
     while(aa)
     {
         while(bb)
         {
          if(aa->data == bb->data)
           {
             p=(ListNode)malloc(sizeof(Node));
             temp->next=p;
             temp=temp->next;
             temp->data=aa->data;
             bb=bb->next;
           }
           else
           {
               bb=bb->next;
           }
         }
         aa=aa->next;
         bb=b->next;
     }
     ListNode q=NULL;
     temp->next=q;
     return head;
}

ListNode Sub(ListNode a,ListNode b){
     ListNode head=(ListNode)malloc(sizeof(Node));
     ListNode temp=head,q;
     ListNode aa=a->next;
     ListNode bb=b->next;
     while(aa)
     {
         while(bb)
          {
            if(aa->data == bb->data)
             {
                 break;
             }
             if(bb->next==NULL)
             {
                 q=(ListNode)malloc(sizeof(Node));
                 temp->next=q;
                 temp=temp->next;
                 temp->data=aa->data;
                 break;
             }
             bb=bb->next;
          }
         aa=aa->next;
         bb=b;
     }
     ListNode qq=NULL;
     temp->next=qq;
     return head;
}

int main()
{
    int m,n,p;
    scanf("%d %d %d",&m,&n,&p);
    ListNode A=(ListNode)malloc(sizeof(Node));
    ListNode B=(ListNode)malloc(sizeof(Node));
    ListNode C=(ListNode)malloc(sizeof(Node));
    CreatList(A,m);
    CreatList(B,n);
    CreatList(C,p);
    ListNode aa=A->next;
    ListNode bb=B->next;
    ListNode cc=C->next;
    for(int i=0;i<m;i++)
    {
       scanf("%d",&aa->data);
       aa=aa->next;
    }
    for(int i=0;i<n;i++)
    {
       scanf("%d",&bb->data);
       bb=bb->next;
    }
    for(int i=0;i<p;i++)
    {
       scanf("%d",&cc->data);
       cc=cc->next;
    }
    ListNode cha=CompareList(B,C);
    ListNode answer=Sub(A,cha);
    ListNode newanswer=answer->next;
    while(newanswer)
    {
        printf("%d ",newanswer->data);
        newanswer=newanswer->next;
    }
    return 0;
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值