链表相减

书上题目,要用带头链表处理

  1 #include <iostream>
  2 #include <cstdio>
  3 #include <cstdlib>
  4 using namespace std;
  5 typedef struct node
  6 {
  7     int date;
  8     struct node *next;
  9 }listnode,*linklist;
 10 linklist initlist(linklist head)    /*链表初始化*/
 11 {
 12     head=new node;    /*申请内存*/
 13     if(head==NULL)
 14         cout<<"链表创建失败";
 15     else
 16         head->next=NULL;
 17     return head;
 18 }
 19 int listempty(linklist head)
 20 {
 21     if(head->next==NULL)
 22         return 1;
 23     return 0;
 24 }
 25 int inputlist(linklist head,int n)
 26 {
 27     int i,t;
 28     linklist tail=NULL,temp=NULL;
 29     for(i=0;i<n;i++)
 30     {
 31         if(tail==NULL)    //开始出错了
 32         {
 33             tail=head;
 34             cin>>t;
 35             head->date=t;
 36         }
 37         else
 38         {
 39             temp=new node;
 40             cin>>t;
 41             temp->date=t;
 42             tail->next=temp;
 43             tail=temp;
 44             tail->next=NULL;
 45         }
 46     }
 47     return 0;
 48 }
 49 void outputlist(linklist head)
 50 {
 51     linklist p=head;
 52     while(p!=NULL)
 53     {
 54         cout<<p->date<<‘ ‘;
 55         p=p->next;
 56     }
 57     cout<<endl;
 58 }
 59 void destroylinklist(linklist head)
 60 {
 61     linklist p=head,q=NULL;
 62     while(p!=NULL)
 63     {
 64         q=p;
 65         p=p->next;
 66         free(q);
 67     }
 68 }
 69 void insert(linklist head,int n,int num)
 70 {
 71     linklist p=head,q=head,temp,l;
 72     int i;
 73     for(i=0;i<n;i++)
 74     {
 75         q=p;
 76         p=p->next;
 77     }
 78     temp=p;
 79     l=new listnode;
 80     l->date=num;
 81     l->next=temp;
 82     q->next=l;
 83 }
 84 int listlen(linklist head)
 85 {
 86     int count=0;
 87     linklist p=head;
 88     while(p!=NULL)
 89     {
 90         count++;
 91         p=p->next;
 92     }
 93     return count;
 94 }
 95 linklist del(linklist head1,linklist head2)
 96 {
 97     int i,flag=0;
 98     linklist H1,q=head2;
 99     H1=new listnode;
100         H1->next=head1;
101     linklist pre=H1,p=H1->next;
102     while(p!=NULL)
103     {
104         flag=0;
105         q=head2;
106         while(q!=NULL)
107         {
108             if(p->date==q->date)
109             {
110                 pre->next=p->next;
111                 flag=1;
112             }
113             q=q->next;
114         }
115         if(flag==0)
116         {
117             pre=p;
118             p=p->next;
119         }
120         else
121         {
122             p=pre->next;
123         }
124     }
125     return H1->next;
126 }
127 int main()
128 {
129     linklist head1,head2;
130     head1=initlist(head1);
131     head2=initlist(head2);
132     inputlist(head1,6);
133     inputlist(head2,5);
134     head1=del(head1,head2);
135     outputlist(head1);
136     return 0;
137 }
时间: 2024-12-15 14:39:45

链表相减的相关文章

ORACLE日常操作手册

转发自:http://blog.csdn.net/lichangzai/article/details/7955766 以前为开发人员编写的oracle基础操作手册,都基本的oracle操作和SQL语句写法,适合初学者. 因是很久之前写的,文章中可能会存在不准确的地方,希望指正. ORACLE日常操作手册 目录 一.......数据库的启动和关闭...4 1.   数据库的正常启动步骤...4 2.   数据库的正常关闭步骤...4 3.   几种关闭数据库方法对比...4 4.   数据库的启

返回一个整数数组中最大子数组的和(然后就是一个环形数组的相关的操作)

要求: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值.要求时间复杂度为O(n) 以上就是对应的题目的要求: 对于不是环形数组的设计的思想就是:----------------------------------- 主要的是: for(i=2;i<=n;i++) { if(a[i]+a[i-1]>a[i]) a[i]=a[i]+a[i-1]; } int ans=-100000; for(i=1;i<=

栈的链式存储结构和入栈出栈操作

参考<大话数据结构>P98~99——栈的链式存储结构. 进栈: 出栈: 举个简单的例子: 代码和解释如下(VS2012测试通过): 1 #include <iostream> 2 #include <string> 3 using namespace std; 4 5 typedef string status;//用书上推荐的status返回是否成功,C++中的模板类string比字符数组char[]更方便 6 7 //栈的结点 8 //包含data,和指向下一个结点

Hdu 3699 Aragorn&#39;s Story (树链剖分)

题目大意: 对一颗树上进行路径加减,然后询问单点的值. 思路分析: 简单的树链剖分模板题. #include <cstdio> #include <iostream> #include <cstring> #include <algorithm> #pragma comment(linker,"/STACk:10240000,10240000") #define maxn 50005 #define lson num<<1,s

2243: [SDOI2011]染色(树链剖分+线段树)

2243: [SDOI2011]染色 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 8400  Solved: 3150[Submit][Status][Discuss] Description 给定一棵有n个节点的无根树和m个操作,操作有2类: 1.将节点a到节点b路径上所有点都染成颜色c: 2.询问节点a到节点b路径上的颜色段数量(连续相同颜色被认为是同一段),如“112221”由3段组成:“11”.“222”和“1”. 请你写一个程序依次完

2016shenyang-1002-HDU5893-List wants to travel-树链剖分+线段树维护不同区间段个数

肯定先无脑树链剖分,然后线段树维护一段区间不同个数,再维护一个左右端点的费用. 线段树更新,pushDown,pushUp的时候要注意考虑链接位置的费用是否相同 还有就是树链剖分操作的时候,维护上一个更新的位置的费用. 总之就是出现区间合并,就考虑总数是否要减一 好想不好写 //场上根本写不完啊 1 /*--------------------------------------------------------------------------------------*/ 2 3 #inc

数据结构之树链剖分

首先了解一下基本概念: 重儿子:siz[u]为v的子节点中siz值最大的,那么u就是v的重儿子.      轻儿子:v的其它子节点.      重边:点v与其重儿子的连边.      轻边:点v与其轻儿子的连边.      重链:由重边连成的路径.      轻链:轻边. 剖分后的树有如下性质:      性质1:如果(v,u)为轻边,则siz[u] * 2 < siz[v]:      性质2:从根到某一点的路径上轻链.重链的个数都不大于logN. 树链剖分,如其字面意思,就是将一棵树按照轻重

HDU3342 Legal or Not【拓扑排序】【链式前向星】

Legal or Not Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 4633    Accepted Submission(s): 2115 Problem Description ACM-DIY is a large QQ group where many excellent acmers get together. It is

终于把区块链与物流的关联搞清楚了 区块链的分类 物流业中区块链技术应用的案例

原文 区块链的分类 区块链可以分为三类:公有链.私有链.联盟链. 1.公有链无官方组织及管理机构,无中心服务器,参与的节点按照系统规则自由接入网络.不受控制,节点间基于共识机制开展工作. 2.私有链建立在某个企业内部,系统的运作规则根据企业要求进行设定,修改甚至是读取权限仅限于少数节点,同时仍保留着区块链的真实性和部分去中心化的特性. 3.联盟链由若干机构联合发起,介于公有链和私有链之间,兼具部分去中心化的特性. 去中心化是区块链的最重要特征 区块链技术提供了一种无需信任单个节点.还能创建共识网