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

来源:互联网 发布:算法实现约瑟夫环c语言 编辑:程序博客网 时间:2024/06/02 18:58

今天复习一下链表的拼接,从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都会消失,不存在内存中。

0 0
原创粉丝点击