题目:
在无头结点的动态单链表上实现线性表操作DELETE(L, i),并和在带头结点的动态单链表上实现相同操作的算法进行比较
分析:
删除节点的操作一般步骤为:找到该节点的直接前驱,然后使其直接前驱的 next 指向该节点的直接后继
代码:
初始化:
#include<stdio.h>
#include<stdlib.h>
#define OK 1
typedef int Status;
typedef int ElemType;
typedef struct LNode
{
ElemType data; // 数据域
LNode *next; // 指针域
}LNode, *LinkList;
Status InitList(LinkList &L)//初始化链表
{ // 初始化单链表 L
L = (LNode*)malloc(sizeof(LNode));
L->next = NULL;
return OK;
}//InitList
创建单链表:
Status CreateList(LinkList &L, int e)
{ // 创建单链表 L
LinkList p = L;
while(p->next)
p = p->next;
LinkList temp = (LinkList)malloc(sizeof(LNode));
temp->data = e;
temp->next = NULL;
p->next = temp;
return OK;
}//CreateList