您的位置:首页 > 理论基础 > 数据结构算法

数据结构与算法(5、链表的拼接)

2015-07-22 22:12 260 查看
今天复习一下链表的拼接,从2个链表的拼接开始

例如有一个链表A,一个链表B,A和B已经排序好,现在的需求是将链表A和链表B的元素按照排好序,然后形成新的链表C。

首先规划一下思路:

1、判断是否是空链表,如果是空链表,就返回另外一个链表

(第一个function isEmpty()判断是否是空链表)

2、如果不是空链表,那么让A和B的第一个元素进行比较,如果A的第一个元素(取链表头结点的元素)大于B的第一个元素,那么让B的第一个元素弹出(删除B中的元素),然后重新放在新的链表C中(链表尾部加入新的数据),在这个时候,我们需要定义三个方法,一个是取得链表的头结点的数据的方法getHeadData(),二是删除B链表的元素pop_element(),第三个是在链表的尾部插入新的结点push_back()

做好思路之后,下面实现每一个方法

* isEmpty()*

//判断链表是否是空,只需要判断
void isEmpty(){
//判断头结点是否是空结点
return head==nullptr;
}


getHeadData()

int getHeadData(){
if(isEmpty()){
throws"您的链表是空链表";
}else{
//取出头结点的数值
return head->data;
}
}


pop_element()

void pop_element(){
if(isEmpty()){
throws"您的链表是空链表";
}else{
//注意如果是在java中,有GC机制,无需释放内存,会自动回收
node *p=head;
head=head->next;
delete p;
}
}


push_back()

void push_back(int value){
if(isEmpty()){
//如果C链表是空的,那么创建头结点和尾结点
head=tail=new node(value);
}else{
//如果C不是空的,那么让新结点在尾部
tail->next=new node(value);
//尾结点移动,便于下次插入执行下一步
tail=tail->next;
}
}


使用上面的方法的思路,我们可以得到A和B原来是有元素的,C是空的。最后在内存中C是有元素的,A和B都会消失,不存在内存中。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: