整体代码:
typedef
struct Node {
int data;
struct Node * next;
}Node;
class SingleList
{
Node head;
int length;
static int I;
public:
SingleList();
void create(int len);
void insert(int index,int data);
void Delete(int index);
int find(int index);
int size();
void print();
void merge(SingleList list);
~SingleList();
};
#include "SingleList.h"
SingleList::SingleList()
{
head.next = NULL;
head.data = 0;
length = 0;
}
void SingleList::create(int len)
{
for (int i = 0; i < len; i++)
{
int num;
cin >> num;
insert(i, num);
}
}
void SingleList::insert(int index,int data)
{
Node * p_head = &head;
while (index --)
{
p_head = p_head->next;
}
Node * nodeTemp = new Node;
nodeTemp->data = data;
nodeTemp->next = p_head->next;
p_head->next = nodeTemp;
length++;
}
void SingleList::Delete(int index)
{
Node * p_head = &head;
index++;
while (index --)
{
p_head = p_head->next;
}
Node * tmpPtr = p_head->next;
p_head->next = p_head->next->next;
delete tmpPtr;
length--;
}
int SingleList::find(int index)
{
if (index < 0 || index > length) {
return 0;
}
Node * tmpPtr = head.next;
while (index --)
{
tmpPtr = tmpPtr->next;
}
return tmpPtr->data;
}
int SingleList::size()
{
return length;
}
void SingleList::print()
{
Node * p_head = head.next;
while (p_head != NULL)
{
cout << p_head->data << " ";
p_head = p_head->next;
}
cout << endl;
}
void SingleList::merge(SingleList list)
{
Node * p_head1 = head.next;
Node * p_head2 = list.head.next;
int i = 0;
while (p_head1 != NULL && p_head2 != NULL)
{
if (p_head1->data > p_head2->data)
{
insert(i ++,p_head2->data);
p_head2 = p_head2->next;
continue;
}
if (p_head1->data < p_head2->data)
{
i++;
p_head1 = p_head1->next;
continue;
}
p_head1 = p_head1->next;
p_head2 = p_head2->next;
i++;
}
while (p_head2 != NULL)
{
insert(i++, p_head2->data);
p_head2 = p_head2->next;
}
}
//void SingleList::merge(SingleList list)
//{
// Node * p_head1 = head.next;
// Node * p_head2 = list.head.next;
//
// SingleList singleList;
// int i = 0;
// while (p_head1 != NULL && p_head2 != NULL)
// {
// if (p_head1->data > p_head2->data)
// {
// singleList.insert(i++, p_head2->data);
// p_head2 = p_head2->next;
// continue;
// }
// if (p_head1->data < p_head2->data)
// {
// singleList.insert(i++, p_head1->data);
// p_head1 = p_head1->next;
// continue;
// }
// singleList.insert(i++, p_head1->data);
// p_head1 = p_head1->next;
// p_head2 = p_head2->next;
// }
// while (p_head1 != NULL)
// {
// singleList.insert(i++, p_head1->data);
// p_head1 = p_head1->next;
// }
//
// while (p_head2 != NULL)
// {
// singleList.insert(i++, p_head2->data);
// p_head2 = p_head2->next;
// }
// head.next = singleList.head.next;
//}
SingleList::~SingleList()
{
}
#include "SingleList.h"
#include <iostream>
using namespace std;
int main(void)
{
SingleList list;
list.create(5);
cout << "输出第一个链表:";
list.print();
/*list.insert(2, 100);
list.print();
cout << "插入某个节点完毕!" << endl;
list.Delete(3);
list.print();
cout << "删除某个节点完毕!" << endl;
cout << "find:" << list.find(3) << endl;
cout << "插入某位置节点完毕!" << endl;
list.print();*/
SingleList list2;
list2.create(5);
cout << "输出第二个链表:";
list2.print();
cout << "链表合并:";
//list2.merge(list);
//list2.print();
list.merge(list2);
list.print();
return 0;
}
第一种浪费空间,但是简单
void SingleList::merge(SingleList list)
{
Node * p_head1 = head.next;
Node * p_head2 = list.head.next;
SingleList singleList;
int i = 0;
while (p_head1 != NULL && p_head2 != NULL)
{
if (p_head1->data > p_head2->data)
{
singleList.insert(i++, p_head2->data);
p_head2 = p_head2->next;
continue;
}
if (p_head1->data < p_head2->data)
{
singleList.insert(i++, p_head1->data);
p_head1 = p_head1->next;
continue;
}
singleList.insert(i++, p_head1->data);
p_head1 = p_head1->next;
p_head2 = p_head2->next;
}
while (p_head1 != NULL)
{
singleList.insert(i++, p_head1->data);
p_head1 = p_head1->next;
}
while (p_head2 != NULL)
{
singleList.insert(i++, p_head2->data);
p_head2 = p_head2->next;
}
head.next = singleList.head.next;
}
第二种思路有点乱,但是省时省空间
void SingleList::merge(SingleList list)
{
Node * p_head1 = head.next;
Node * p_head2 = list.head.next;
int i = 0;
while (p_head1 != NULL && p_head2 != NULL)
{
if (p_head1->data > p_head2->data)
{
insert(i ++,p_head2->data);
p_head2 = p_head2->next;
continue;
}
if (p_head1->data < p_head2->data)
{
i++;
p_head1 = p_head1->next;
continue;
}
p_head1 = p_head1->next;
p_head2 = p_head2->next;
i++;
}
while (p_head2 != NULL)
{
insert(i++, p_head2->data);
p_head2 = p_head2->next;
}
}