day23
两个循环链表h1和h2,编写一个函数将h2加入到h1之后,保持链表循环的形式
两个链表合起来 变成一个单链表
算法思想:找到h1的表尾p,h2的表尾q
将p指向h2 q指向h1 组成一条循环单链表
Linklist conn_link(Linklist&h1,Linklist&h2){
LNode*p=h1;
LNode*q=h2;
//调整到表尾
while(p!=h1){
//作为链表尾部的判断
p=p->next;
}
while(q!=h2){
//作为链表尾部的判断
q=q->next;
}
p->next=h2->next;
//由于h2为头结点,在进行循环链表合并时,该节点不存储数据,因此为保证连续性,将h1链表的尾部的next指向h2的第一个数据节点。
free(h2);//该步骤可释放也可不释放,理解算法思想即可
q->next=h1;//进行尾部首部链接,保证为一个循环链表
return h1;//返回循环链表
}
day24
设有一个带头节点的循环单链表,其结点值均为正整数,设计一个算法,反复找出单链表中结点值最小的结点,并输出,然后将该点从单链表中删除,直到单链表为空为止,在删除表头结点
算法思想:1、针对以上的的题意进行分析,得到一般解题过程为:
先查找符合要求的最小值结点
进行删除
注意!!!!!!以上两个步骤只是建立在一趟单链表的遍历下删除了一个最小值结点
题目要求的是反复找出单链表中节点值最小的结点,并输出,然后将其删除,需要再设置一个循环进行遍历。
在单链表中删除最小值结点可参考day9
在这里贴出
//因为要操作链表所以必要加&符号
//结构体
typedef struct LNode{
int data;
struct LNode * next;
};
ListLink Delete_min(ListList &L){
//初始化节点
LNode * pre = L;//p的前驱
LNode * p = pre->next;//指向头节点的下一个节点 遍历
LNode * minp