二个有序链表相加,没有采用迭代的方式。普通的逻辑思维
#include<iostream>
using namespace std;
class List_Node //链表结点定义:一个value,一个指针指向下一个结点
{
public:
int value;
List_Node *ptr;
};
class List//链表类,
{
public:
List_Node *head;
int value;
List() {
this->head = new List_Node;
head->value = 0;
this->head->ptr =NULL;
}
void creat();
void show();
};
void List::creat() {
auto p = this->head;
cout << "请输入链表结点的个数" << endl;
int num;
cin >> num;
for (int i = 0; i < num; i++)
{
auto newnode = new List_Node;
cout << "请输入结点值" << endl;
int s;
cin >> s;
newnode->value = s;
newnode->ptr = p->ptr;
p->ptr = newnode;
p = newnode;
}
}
void List::show() {
auto L = this->head->ptr;
while (L)
{
cout << L->value << endl;
L = L->ptr;
}
}
List& merge(List &l, List &l2) {
List l3;
auto nodel3 = l3.head;
auto l_ptr = l.head->ptr;
auto l2_ptr = l2.head->ptr;
while(l_ptr&&l2_ptr)
{
if (l_ptr->value == l2_ptr->value)
{
auto newnode = new List_Node;
newnode->value = l2_ptr->value;
newnode->ptr = nodel3->ptr;
nodel3->ptr = newnode;
nodel3 = newnode;
auto newnode1 = new List_Node;
newnode1->value = l2_ptr->value;
newnode1->ptr = nodel3->ptr;
nodel3->ptr = newnode1;
nodel3 = newnode1;
l_ptr = l_ptr->ptr;
l2_ptr = l2_ptr->ptr;
}
else if (l_ptr->value > l2_ptr->value)
{
auto newnode = new List_Node;
newnode->value = l2_ptr->value;
newnode->ptr = nodel3->ptr;
nodel3->ptr = newnode;
nodel3 = newnode;
l2_ptr = l2_ptr->ptr;
}
else if(l_ptr->value<l2_ptr->value)
{
auto newnode = new List_Node;
newnode->value = l_ptr->value;
newnode->ptr = nodel3->ptr;
nodel3->ptr = newnode;
nodel3 = newnode;
l_ptr = l_ptr->ptr;
}
}
while(l_ptr)
{
auto newnode = new List_Node;
newnode->value = l_ptr->value;
newnode->ptr = nodel3->ptr;
nodel3->ptr = newnode;
nodel3 = newnode;
l_ptr = l_ptr->ptr;
}
while (l2_ptr)
{
auto newnode = new List_Node;
newnode->value = l2_ptr->value;
newnode->ptr = nodel3->ptr;
nodel3->ptr = newnode;
nodel3 = newnode;
l2_ptr = l2_ptr->ptr;
}
return l3;
}
int main()
{
List l;
l.creat();
List l2;
l2.creat();
auto l3 = merge(l, l2);//二个链表的合并,返回一个新链表的引用
l3.show();
return 0;
}