#include<stdio.h>
#include<stdlib.h>
typedef int Elemtype;
typedef struct mood{
Elemtype data;
struct mood *next;
}LNode, *LinkList;
LinkList List_TailInsert(LinkList &L, int n)
{
printf("带头节点尾插法--输入节点");
Elemtype x;
LNode *s, *r;
L = (LNode*)malloc(sizeof(LNode)); //设置头结点
r = L;
for(int i = 0; i < n; i++)
{
scanf("%d", &x);
s = (LNode*)malloc(sizeof(LNode)); //创建新节点
s->data = x; //新节点的值为x
s->next = NULL; //新节点每次从后端插入,因此新节点的next指向NULL
r->next = s; //新节点x与它的前节点建立联系
r = s;
}
r->next = NULL;
return L;
}
//按位序删除 删除第i位的节点,并把该节点的值赋给e
bool ListDelete(LinkList &L, int i, Elemtype&e)
{
//判断链表是否为空或者是否只有头结点
if(L == NULL || L->next == NULL){
//TODO
return false;
}
LNode *p = L;
int j = 0;
while(p != NULL && j < i - 1) //找到第i-1位的节点
{
p = p->next;
j++;
}
//删除i-1位后面的节点
LNode *q;
q = p->next;//q就为第i位的节点
e = q->data; //把该节点的值赋给e
p->next = q->next;//把i-1位节点的next改为i位节点的next
free(q);//释放i位节点
return true;
}
void OutPut(LinkList L)
{
LNode *p = L;
while(p != NULL){
//TODO
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main()
{
int n;
scanf("%d", &n);
LinkList L = List_TailInsert(L, n);
OutPut(L->next);
printf("输入要删除的节点的位置");
int i;
Elemtype e = 0;
scanf("%d", &i);
if(ListDelete(L, i, e)){
//TODO
OutPut(L->next);
printf("该节点的值为:%d\n", e);
}
else
printf("删除失败");
}
单链表按位序删除节点
最新推荐文章于 2024-05-14 17:02:05 发布