线性表的结点是有序号的,包含n个结点的线性表从链头到链尾的结点序号分别为0、1、……n-1。删除线性表指定位置的操作也是常用的功能。要求补全函数delAt函数,该函数根据给定的位置信息删除链表中对应的结点。
相关知识
结点的删除可以根据结点位置的不同分为三种情况:删除链首结点、删除链尾结点、删除中间结点。
- 删除链首结点后,原来序号为1的结点成为新的链首结点,链表头指针也应该存储该结点的地址,该结点的地址原来存放在哪?
- 删除链尾结点后,原来序号为n-2的结点成为新的链尾结点,该结点的指针域也应该置为NULL,表示链表的结束。怎么访问序号为n-2的结点的指针域?
- 删除中间结点只需要将其前面结点的指针域修改为其后面结点的地址即可。例如删除序号为i的结点,需要将序号为i-1的结点的指针域修改为序号为i+1的结点地址。怎么访问序号为i-1的结点的指针域?序号为i+1的结点地址存放在哪?
#include <iostream>
//#include "linearList.h"
using namespace std;
// 定义结点结构
struct node
{
int data; // 数据域
node * next; // 指针域,指向下一个结点
};
// 函数delAt:删除链表中序号为i的结点,如果i是非法序号则不做操作
// 参数:h-链表头指针,i-要删除结点的序号
// 返回值:删除结束后链表首结点地址
node * delAt(node * h, int i);
// 函数search:在链表中查找包含数据num的结点
// 参数:h-链表头指针,num-要查找的数据
// 返回值:找到了返回该结点的地址,否则返回NULL
node * search(node * h, int num);
// 函数insertSort:链表排序插入
// 参数:h-链表头指针,t-指向要插入的结点
// 返回值:插入结点后链表的首结点地址
node * insertSort(node *h, node *t);
// 函数insertHead:链表头部插入
// 参数:h-链表头指针,t-指向要插入的结点
// 返回值:插入结点后链表的首结点地址
node * insertHead(node *h, node *t);
// 函数printList:输出链表,每个数据之间用一个空格隔开
// 参数:h-链表头指针
void printList(node *h);
// 函数insertTail:链表尾部插入
// 参数:h-链表头指针,t-指向要插入的结点
// 返回值:插入结点后链表的首结点地址
node *insertTail(node *h, node *t);
// 函数delList:删除链表,释放空间
// 参数:h-链表头指针
void delList(node *h);