刚在练习的时候需要将两个递增有序的单链表进行归并处理,之前碰到这种问题,心里总是有些害怕,害怕自己不能完全考虑到所有的情况,怕自己想不明白里面的流程,怕自己做不到。。。
但是,我慢慢理解并深以为然的是:越动手去做,越得心应手。
好像应了那句,越努力越幸运。
很多情况下,生活中的其他场景里,我能够很自然,自信的去思考,去行动,但是对应到程序世界里来,就有些畏手畏脚。明明背后的逻辑,需要的领域知识,自己全都能够灵活应用,却偏偏不敢动手写代码。
我不知道你是不是曾经或者现在也有这样的困惑。这花费了我许久的时间去想通。
OK,我们还是主要聊这段代码如何从自然的归并思路平滑转换到代码中。
先看题目:
假设两个递增有序的线性表,均以单链表形式存储。将两个单链表归并为按元素递减次序排列的单链表,并要求:利用原来的结点存储。
#include <iostream>
#include <ctime>
#include <vector>
#include <algorithm>
using namespace std;
typedef int ElemType;
#define MAX 100
typedef struct Node
{
ElemType data;
struct Node *next;
}Node, *List;
// 生成一个链表,数值随机生成
// 返回指向生成链表的头结点指针
List generateList(int n)
{
srand(n);
// 定义头结点
List Head = (List)malloc(sizeof(Node));
Head->next = NULL;
Node *temp = Head; //使用temp拿着L的位置,为的是不改变L的数值
// 先通过vector建立一个递增有序的数列
vector<int> ins;