循环链表合并

书上的题目,带头链表&不带头链表

不带头链表为空时,判断:head==NULL;

带头链表为空是,判断head->next=NULL;

但对于链表的插入、删除会有不同,不带头链表对于头节点需要单独处理,而对于带头链表则不需要

 1 #include <iostream>
 2 using namespace std;
 3 typedef struct node
 4 {
 5     int date;
 6     struct node* next;
 7 }*linklist,listnode;
 8 linklist initlist(linklist head)
 9 {
10     head=new listnode;
11     head->next=NULL;
12     return head;
13 }
14 void input(linklist head,int n)
15 {
16     linklist tail=NULL,temp=NULL;
17     while(n--)
18     {
19         if(tail==NULL)
20         {
21             cin>>head->date;
22             tail=head;
23         }
24         else
25         {
26             temp=new listnode;
27             cin>>temp->date;
28             tail->next=temp;
29             tail=temp;
30             tail->next=NULL;
31         }
32     }
33     tail->next=head;
34 }
35 linklist bin(linklist head1,linklist head2)
36 {
37     linklist p=head1,tail;
38     while(p->next!=head1)
39         p=p->next;
40     tail=p;
41     tail->next=head2;
42     p=head2;
43     while(p->next!=head2)
44         p=p->next;
45     p->next=head1;
46     return p;
47 }
48 void outputlist(linklist head)
49 {
50     linklist p=head;
51     while(p!=NULL)
52     {
53         cout<<p->date<<‘ ‘;
54         p=p->next;
55     }
56 }
57 int main()
58 {
59     linklist head1,head2,tail=NULL,p;
60     head1=initlist(head1);
61     head2=initlist(head2);
62     input(head1,5);
63     input(head2,5);
64     tail=bin(head1,head2);
65     p=head1;
66     while(p!=tail)
67     {
68         cout<<p->date<<‘ ‘;
69         p=p->next;
70     }
71     cout<<tail->date;
72     return 0;
73 }
时间: 2024-10-03 16:31:49

循环链表合并的相关文章

数据结构(一)线性表循环链表相关补充

(一)合并两个循环链表 p = rearA->next; //A的头结点,一会还要使用 rearA->next = rearB->next->next; //是A的尾结点指向B的第一个结点 q = rearB->next; //存放B的头结点,需要释放 rearB->next = p; //使B的尾结点指向A的头结点 free(q); //释放B的头结点 (二)判断单链表中是否有环 方法一:使用两个指针,循环嵌套,A指针在外层循环,一步一步向下走,B指针在内层循环,循环

二叉树,约瑟夫,多项式合并!

2015.2.9星期一 晴 树的基本概念: 度数:一个节点的子树的个数为该节点的度数,一颗数的度数是指该树中节点的最大度数树叶或者终端节点:度数为0的节点高度或者深度:节点的层数等于父节点的层数加1,根节点的层数定义为1,树中节点层数最大值称为该树的高度或者深度有序树:若树中每个节点的各子树的排列为从左到右,不能交换,即兄弟之间是有序的,则称该树为有序树满二叉树:深度为K时有2^k-1个节点的二叉树完全二叉树:只有最下面两层就度数小于2的节点,且最下面一层的叶节点集中在最左边的若干位置上. 对于

双链表&amp;链表合并&amp;多项式相加算法

//单链表的合并 //链表合并 //两个链表必须是有序的 #define Maxsize 5 typedef  int elemtype; typedef struct linklist { elemtype data; struct linklist *next; }Linklist; //建立链表1 Linklist *CreateList1 () { int i,data ; Linklist *head, *p, *q; head=p=(Linklist  *)malloc(sizeof

双向循环链表(C++实现,兼具Boost单元测试)

本文双链表介绍部分参考自博文数组.单链表和双链表介绍 以及 双向链表的C/C++/Java实现. 1 双链表介绍 双向链表(双链表)是链表的一种.和单链表一样,双链表也是由节点组成,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱.所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点.一般我们都构造双向循环链表. 双链表的示意图如下: 表头为空,表头的后继节点为"节点10"(数据为10的节点):"节点10"的后继节点是"

Linux内核循环链表经典分析和移植

为什么说这个链表做的经典呢,哥哥我从Linux内核里边儿扣出来的,要么怎么说内核不是一般人能写的,这代码太TM优美了! 这里有一篇参考文章:http://isis.poly.edu/kulesh/stuff/src/klist/,下面的分析来自其他人的分析这里做了整理,使得它便于阅读. 在linux内核中,有大量的数据结构需要用到双循环链表,例如进程.文件.模块.页面等.若采用双循环链表的传统实现方式,需要为这些数据结构维护各自的链表,并且为每个链表都要设计插入.删除等操作函数.因为用来维持链表

(java描述)关于链表的代码-----单双、循环链表、约瑟夫环、多项式相加

将链表头尾倒置 将几个链表合并成一个新的链表,将链表中重复的节点去掉,并按大小排序 双向循环链表 单向循环链表(约瑟夫循环) 多项式相加 程序源代码 单链表.单向循环链表结点类 package javab; public class Node { int data; Node next; public Node(int data){ this.data=data; } } 第一题代码: package javab; import java.util.Scanner; public class I

复习下C 链表操作(双向循环链表,查找循环节点)

双向循环链表  和 单向循环链表 查找循环节点 思路都是一样. 快慢指针查找法. 理论可参考 c 链表之 快慢指针 查找循环节点 typedef struct Student_Double { char name[10]; int point; struct Student_Double *preStu; struct Student_Double *nextStu; } StudentDouble; StudentDouble * CreateDoubleCircleLink_Table(){

【数据结构】循环链表&amp;&amp;双向链表详解和代码实例

喜欢的话可以扫码关注我们的公众号哦,更多精彩尽在微信公众号[程序猿声] 01 循环链表 1.1 什么是循环链表? 前面介绍了单链表,相信大家还记得相关的概念.其实循环链表跟单链表也没有差别很多,只是在某些细节上的处理方式会稍稍不同. 在此之前,大家可以先思考一个问题:单链表中,要找到其中某个节点只需要从头节点开始遍历链表即可,但是有些时候我们的想法是,能不能从任意节点开始遍历,也能找到我们需要的那个节点呢? 其实啊,这个实现也很简单自然,把整个链表串成一个环问题就迎刃而解了.所以,关于循环链表,

循环链表的建立及各种操作

循环链表 循环链表是一个收尾相接的链表,将单链表的最后一个指针域改由NULL改为指向表头结点这就是单链式的循环链表,并称为循环单链表 带头结点的循环单链表的各种操作的算法实现与带头结点单链表的算法实现类似,差别仅在于算法判别当前结点p是否为尾结点的条件不同.单链表中的判别条件为p!=NULL或p->next!=NULL,而单循环链表判别条件是p!=L或p->next!=L 在循环单链表中附设尾指针有时候比附设头指针更简单.如:在用头指针的循环单链表中找a1的时间复杂度是O(1),找an需要从头