【数据结构】两个单循环链表的连接操作

如果在单链表或头指针表示的链表上操作这个比较消耗性能,因为都需要遍历第一个链表,找到an,然后将b1链接到an的后面,时间复杂度是:O(n)。若在尾指针表示的单循环链表上实现,则只需改变指针,无需遍历,时间复杂度是:O(1)

现在看算法实现,需要4个主要步骤,都注释了:

	LinkList Connect(LinkList A,LinkList B){
		//假设A,B为非空循环链表的尾指针
		LinkList p = A->next;//1、保存A链表的头结点的位置
		A->next = B->next->next;//2、将A表的表尾链接到B表达开始节点处
		free(B->next);//3、释放B表达头结点
		B->next= P;//4、将B表达表尾的next链接到A的头
		return B;//返回新循环链表的尾指针
	}

【数据结构】两个单循环链表的连接操作,布布扣,bubuko.com

时间: 2024-12-24 16:59:01

【数据结构】两个单循环链表的连接操作的相关文章

【数据结构】用C++实现单循环链表的各种操作(包括头删,尾删,插入,逆序,摧毁,清空等等)

//头文件 #ifndef _LIST_H #define _LIST_H #include<iostream> using namespace std; template<class Type> class CList; template<class Type> class ListNode { friend class CList<Type>; public: ListNode() :data(Type()), next(NULL) { } ListNo

【数据结构】用C++实现双循环链表的各种操作(包括头删,尾删,插入,逆序,摧毁,清空等等)

//[数据结构]用C++实现单循环链表的各种操作(包括头删,尾删,插入,逆序,摧毁,清空等等) //头文件 #ifndef _CDLIST_H #define _CDLIST_H #include<iostream> using namespace std; template<class Type> class CDList; template<class Type> class ListNode { friend class CDList<Type>; p

两个有序链表连接(归并排序中用到的)

刚才写了k个,顺手写个2个的,在链表的归并排序中很有用,效率非常好 1 /** 2 * Definition for singly-linked list. 3 * public class ListNode { 4 * int val; 5 * ListNode next; 6 * ListNode(int x) { 7 * val = x; 8 * next = null; 9 * } 10 * } 11 */ 12 public class Solution { 13 public Lis

【数据结构】用C++实现双链表的各种操作(包括头删,尾删,插入,逆序,摧毁,清空等等)

//[数据结构]用C++实现双链表的各种操作(包括头删,尾删,插入,逆序,摧毁,清空等等) //头文件 #ifndef _LIST_H #define _LIST_H #include<iostream> using namespace std; template<class Type> class DList; template<class Type> class ListNode { friend class DList<Type>; public: L

c语言,数据结构,链表的一些操作总结

下面是自己的一些学习操作以及总结,能用我会很开心,有不足之处,欢迎大家提出宝贵的意见! c语言链表是一种基本的数据结构,与顺序表一样属于线性表,但是顺序表在内存中的存储单元是连续的,这样就对内存的要求比较高,而链表就不一样了,它能够很好的解决这些缺点,唯一不足就是访问元素的效率不如顺序表来的那么高,但也只是相对而言!而且,链表对于后面的二叉树,图等意义重大,他们之间的联系都是非常紧密的,下面我来给出链表的一些操作. 1.链表的存储结构由数据和指针组成一个节点,每一个指针指向下一个节点,这样环环相

数据结构与算法——线性表链式存储(单循环链表)

今天总结循环单链表 什么是单循环链表? 单链表终端结点的指针域是指向空的,如果将其指向头结点,这样就形成了一个环,那么这种首尾相接的环就够成了单循环链表. 单链表中我们都是用头指针来表示的,但是在单循环链表里,用尾指针(指向最后一个节点).为什么要这样,因为如果用头指针,那么当查找最后一个元素的时候,就要循环遍历,时间复杂度为O(n),如果用尾指针,时间复杂度为O(1),而因为是循环的,所以头指针很容易表示出来即rear->next,时间复杂度也是O(1) 单循环链表中需要注意两点: 头指针使用

数据结构学习--单循环链表(python)

概念 将单链表的终端节点的指针由原来的空指针改为指向头节点, 就是整个单链表形成一个环, 这种首尾相接的单链表称为单循环链表. 实现 class Node: """ 节点 """ def __init__(self, value): self.data = value self.next = None class CircularLinkedList: def __init__(self): self.rear = None # 尾节点 def

再回首,数据结构——线性表、链表上的常见算法

最近在复习数据结构,顺便看看大一的时候写的代码,看完之后比当初有了更加深刻的体会. 希望这些能提供给初学者一些参考. //1.编写算法实现线性表就地逆置的操作 void InverseList (SeqList l) { for (i = 0; i <= (l.length-1)/2; i++) { l.elem[i] <-> l.elem[l.length-1-i]; } } //2.从顺序表中删除自第i个元素开始的k个元素 void DeleteList(SeqList l, int

C语言复习——指针 链表 与 文件操作

刚刚进入大二,准备开始学习C++,对大一所学的C语言一次练习,正好也是赶上老师布置的任务,用C语言写一个  销售管理系统  ,就尽可能的把所学的都用上,也就是结构,指针,文件操作,还有数据结构,本次加入了链表. 用两个函数 Load_LinkList() 和 Save_LinkList() 让链表与文件操作结合,除了打印函数,其他都是在内存中操作链表,这样写更有条理,在创建链表时没有采用书上的用一个中间变量引导,并插入到结点前面,而是直接在链表尾的next申请内存,便于理解,操作也方便. /*首