1. 根据两个有序单链表生成一个新的有序单链表,原有单链表保持不变。要求新生成的链表中不允许有重复元素。 算法如下 ListNode * Merge ( ListNode * L1, ListNode * L2 ) {//根据两个带表头结点的有序单链表L1 和L2, 生成一个新的有序单链表 ListNode *first = new ListNode; ListNode *p1 = L1->link, *p2 = L2->link, *p = first, *q; while ( p1 != NULL && p2 != NULL ) { q = new ListNode; if ( p1->data == p2->data ) { q->data = p1->data; p2 = p2->link; p1 = p1->link; } else if ( p1->data < p2->data ) { q->data = p1->data; p1 = p1->link; } else { q->data = p2->data; p2 = p2->link; } p->link = q; p = q; } while ( p1 != NULL ) { q = new ListNode; q->data = p1->data; p1 = p1->link; p->link = q; p = q; } while ( p2 != NULL ) { q = new ListNode; q->data = p2->data; p2 = p2->link; p->link = q; p = q; } p->link = NULL; return first; } 2. 设有一个线性表 (e0, e1, …, en-2, en-1) 存放在一个一维数组 A[arraysize]中的前 n 个数组元素位置。请编写一个函数将这个线性表原地逆置,即将数组的前 n 个原址内容置换为 (en-1, en-2, …, e1, e0)。 数组原地逆置算法 参数表中给出数组 A[ ] 及指定的数组中前 n 个元素,函数执行后从 A[ ] 中得到数组原地逆置后的结果。 Template void inverse ( T A[ ], int n ) { T tmp; for ( int I = 0; I <= ( n-1 ) / 2; I++ ) { tmp = A[I]; A[I] = A[n-I-1]; A[n-I-1] = tmp;} } 3. 设有两个整数类型的顺序表A(有 m 个元素)和B(有n 个元素),其元素均以从小到大的升序排列。试编写一个函数,将这两个顺序表合并成一个顺序表C,要求C 的元素也以从小到大的升序排列。 合并两个升序排列的顺序表的算法 参数表给出参加运算的三个顺序表A、B 与C。从C 中得到执行结果。 算法中用到顺序表的4 个共有函数:Length( ) 求表的当前长度;maxLength( ) 求表的最大允许长度;getData(k) 提取第k 个元素的值;setData(k) 修改第k 个元素的值。 Template void merge ( SeqList& A, Se...