目录
位置:PPT第二章:156
带尾指针(单向)循环链表的合并
PPT(157):

我们要做的,即:
让A表尾节点指向B表首结点,让B表尾节点指向A表首结点:
Project 1:
Status 合并链表(Lnode A,Lnode B)
{
//前置条件声明:
LinkList Ta, Tb;//两表的尾指针
LinkList temp = Ta;//
Ta->next = Tb->next;//&B;
Tb->next = temp;
return true;
}
问题:
临时变量temp应该指向的,是尾结点指向的地址,而不是尾结点本身的地址;
两表合并以后不应存在原B表的头结点(理论上说,应该删除)
另外:
Ta和Tb是两表本身的名称,只是两表都采用尾指针而已,不存在什么指向表B的说法
Project 2:
Status 合并链表(LinkList Ta, LinkList Tb)
{
LinkList temp = Ta->next;
//
Ta->next = Tb->next->next;//指向b1
delete Tb->next;
Tb->next = temp;
//
return true;
}
前提:两表非空
当我们试图去简化程序,看看能不能不用temp,结果发现:(根本不可能实现)
尾指针Ta指向表Tb的首元结点时,Tb肯定不能被销毁,且Tb->next也不能变动
要不然就找不到表Tb的首元结点了
此后,想要执行让“尾指针Tb指向表Ta的头结点”的操作,就必须再搞出(设置)一个变量来储存Ta的头结点的地址,要不然根本就无法实现程序的基本功能
双向循环链表
简而言之,双向循环链表的前置定义如下:
struct DLnode
{
Elemtype data;
DLnode* next,* prior;
};
typedef DLnode* LinkList;
双向链表的插入
在链表的第i位插入新元素e:
Project 1:
前置条件:
#include<iostream>
using namespace std;
#include<stdlib.h>//存放exit
#include<math.h>//OVERFLOW,exit
#define MAXlength 100 //初始大小为100,可按需修改
typedef int Status; //函数调用状态
struct K
{
float a;
int b;
string c;
bool operator==(K& t)
{
return t.a == a && t.b == b;
//&& t.c = c;
}
bool operator!=(K& t)
{
return t.a != a || t.b != b;
//|| t.c = c;