.
p(被调用层的形参)带回上一层(调用层)的实参p->link。
template<Type> void List<Type> :: create ( Type A[ ], int n, int i, ListNode<Type> *& p ) {
//私有函数:递归调用建立单链表
if ( i == n ) p = NULL;
else { p = new ListNode<Type>( A[i] );
}
template<Type> void List<Type> :: create ( Type A[ ], int n ) {
//外部调用递归过程的共用函数
first = current = new ListNode<Type>;
create ( A, n, 0, first->link );
}
//建立表头结点
//递归建立单链表
}
create ( A, n, i+1, p->link );
//建立链表的新结点
//递归返回时 p->link 中放入下层 p 的内容
(5) 实现在非递减有序的单链表中删除值相同的多余结点的函数如下:
template <class Type> void List <Type> :: tidyup ( ) {
ListNode<Type> * p = first->link, temp;
while ( p != NULL && p->link != NULL )
if ( p->data == p->link->data ) {
delete temp;
}
else p = p->link;
}
//指针 p 进到链表下一个结点
//检测指针, 初始时指向链表第一个结点
//若相邻结点所包含数据的值相等
//为删除后一个值相同的结点重新拉链
//删除后一个值相同的结点
//循环检测链表
temp = p->first; p->link = temp->link;
3-3 设 ha 和 hb 分别是两个带表头结点的非递减有序单链表的表头指针, 试设计
一个算法, 将这两个有序链表合并成一个非递增有序的单链表。要求结果链表仍
使用原来两个链表的存储空间, 不另外占用其它的存储空间。表中允许有重复的
数据。
【解答】
#include <iostream.h>
template <class Type> class List;
template <class Type> class ListNode {
friend class List<Type>;
public:
ListNode ( ) : link ( NULL ) { } //构造函数, 仅初始化指针成员
//构造函数, 初始化数据与指针成员
ListNode ( Type item, ListNde<Type> * next = NULL ) : data ( item ), link ( next ) { }
private:
};
template <class Type> class List {
private:
ListNode<Type> *first, *last;
Type data;
ListNode<Type> *link;
精品
评论0
最新资源