两个有序链表合并
2017-08-17 19:26
429 查看
点:基本功
题意:两个有序单向链表合并为一个新的链表
剑指offer面试题17
思路:基本功,条件要考虑周全。
代码:
#include <iostream>
template<class T> struct Node {
int val;
Node<T> *next;
Node(T _val):val(_val), next(nullptr) {}
};
template<class T> class Slist {
Node<T> *root;
public:
Slist():root(nullptr) {}
~Slist() {
Node<T> *cur = root;
while (cur) {
Node<T> *next = cur->next;
delete cur;
cur = next;
}
}
Node<T> *GetRoot () {
return root;
}
void Add (int val) {
if (!root) {
root = new Node<T>(val);
} else {
Node<T> *cur = root;
while (cur) {
if (cur->next) {
cur = cur->next;
} else {
break;
}
}
Node<T> *newnode = new Node<T>(val);
cur->next = newnode;
}
}
void show () {
if (root) {
Node<T> *cur = root;
while (cur) {
std::cout << cur->val << "\t";
cur = cur->next;
}
std::cout << std::endl;
}
}
};
int main () {
Slist<int> sl1, sl2;
for (int i = 0; i < 10; i++) {
sl1.Add(i);
sl2.Add(i + 2);
//sl2.Add(i + 20);
}
sl1.show();
sl2.show();
Slist<int> sl3;
Node<int> *cur1 = sl1.GetRoot(), *cur2 = sl2.GetRoot();
while (cur1 || cur2) {
if (cur1 && !cur2) {
while (cur1) {
sl3.Add(cur1->val);
cur1 = cur1->next;
}
break;
} else if (cur2 && !cur1) {
while (cur2) {
sl3.Add(cur2->val);
cur2 = cur2->next;
}
break;
}
if (cur1->val <= cur2->val) {
sl3.Add(cur1->val);
cur1 = cur1->next;
} else {
sl3.Add(cur2->val);
cur2 = cur2->next;
}
}
sl3.show();
return 0;
}
题意:两个有序单向链表合并为一个新的链表
剑指offer面试题17
思路:基本功,条件要考虑周全。
代码:
#include <iostream>
template<class T> struct Node {
int val;
Node<T> *next;
Node(T _val):val(_val), next(nullptr) {}
};
template<class T> class Slist {
Node<T> *root;
public:
Slist():root(nullptr) {}
~Slist() {
Node<T> *cur = root;
while (cur) {
Node<T> *next = cur->next;
delete cur;
cur = next;
}
}
Node<T> *GetRoot () {
return root;
}
void Add (int val) {
if (!root) {
root = new Node<T>(val);
} else {
Node<T> *cur = root;
while (cur) {
if (cur->next) {
cur = cur->next;
} else {
break;
}
}
Node<T> *newnode = new Node<T>(val);
cur->next = newnode;
}
}
void show () {
if (root) {
Node<T> *cur = root;
while (cur) {
std::cout << cur->val << "\t";
cur = cur->next;
}
std::cout << std::endl;
}
}
};
int main () {
Slist<int> sl1, sl2;
for (int i = 0; i < 10; i++) {
sl1.Add(i);
sl2.Add(i + 2);
//sl2.Add(i + 20);
}
sl1.show();
sl2.show();
Slist<int> sl3;
Node<int> *cur1 = sl1.GetRoot(), *cur2 = sl2.GetRoot();
while (cur1 || cur2) {
if (cur1 && !cur2) {
while (cur1) {
sl3.Add(cur1->val);
cur1 = cur1->next;
}
break;
} else if (cur2 && !cur1) {
while (cur2) {
sl3.Add(cur2->val);
cur2 = cur2->next;
}
break;
}
if (cur1->val <= cur2->val) {
sl3.Add(cur1->val);
cur1 = cur1->next;
} else {
sl3.Add(cur2->val);
cur2 = cur2->next;
}
}
sl3.show();
return 0;
}
相关文章推荐
- 写程序。设ha和hb分别是两个带头结点的非递减有序单链表的头指针,试设计算法,将这两个有序链表合并成一个非递增有序的单链表。要求使用原链表空间,
- 02-线性结构1 两个有序链表序列的合并
- 【剑指offer】链表相关-合并两个有序链表&递归写法17
- 合并两个有序链表
- 2-11. 两个有序链表序列的合并(15):链表数据结构基础练习
- 合并两个有序链表(待写)
- 17_7_13:合并两个有序链表。实现1+2+3+...+n,不使用常规方法
- 1.合并两个有序的链表
- 合并两个有序链表/链表反转(逆置)/找链表倒数第k点(遍历一次)
- 我的新思路---合并两个有序链表
- 合并两个有序的链表和计算1+2+3+4....
- 02-线性结构1 两个有序链表序列的合并
- Merge Two Sorted Lists(合并两个有序链表)
- 剑指offer系列之15:合并两个有序的链表
- 合并两个有序链表,合并后依然有序(C语言)
- 两个有序链表序列的合并
- 合并两个有序链表
- 已知两个链表head1 和head2 各自有序,请把它们合并成一个链表依然有序
- LeetCode(Merge Two Sorted Lists ) 合并两个有序的链表
- 7-1 两个有序链表序列的合并(20 分)