链表
Data Structures Experiment #2 - 使用给出的模板,实现链表的基本操作。
LinkList();
构造函数,构造一个LinkList
,初始化内部的成员变量。
void insert(const int& data, const int& location);
将data
插入location
中。其中location
的计数从0
开始,并且测试时会保证location
小于等于元素的个数。
int length();
返回链表中元素的个数。bool remove(const int& location);
删除位置为location
的元素,如果location
不合法,则返回false
。删除成功则返回true
。
int getData(const int& location);
返回位置为location
的元素。
void converse();
要求可以对链表实现翻转
例如:
- 链表中内容为 1 2 3 4 5
- 倒置后为 5 4 3 2 1
void append(LinkList& append_list);
要求可以将append_list
扩充到链表中,需要对append_list
中的元素实现深拷贝。例如:
- 原始的list : 1 2 3 append_list: 2 3 4
- 调用
append(append_list)
后: 1 2 3 2 3 4
~LinkList();
析构函数。
0x01 构造函数
将头指针赋为空。
1 | LinkList::LinkList(){ |
0x02 length
直接返回长度。
1 | int LinkList::length() |
0x03 getData
沿链表遍历到对应位置。
1 | int LinkList::getData(const int &location) |
0x04 insert
尾插法分情况:
当表为空时,直接插入到
head
处;当表不空时,指针沿链表移动到前一个位置,断开并重新链接。
长度加1。
1 | void LinkList::insert(const int& data, const int& location){ |
0x05 remove
分情况:
- 当删除头结点时,直接释放头结点内存,头指针后移;
- 当删除结点不为头结点时,判断位置合法性后,指针移动到前一个位置,断开并重新链接,释放内存。
长度减1。
1 | bool LinkList::remove(const int& location){ |
0x06 converse
不改变指针域的情况下,交换数值。
1 | void LinkList::converse(){ |
0x07 append
在表尾链接新表,长度增加。
1 | void LinkList::append(const LinkList& append_list){ |
0x08 析构函数
逐结点释放内存。
1 | LinkList::~LinkList(){ |