目录
- 创建单链表
-
- 1.头插法创建单链表(带头结点&&不带头结点)
- 2.尾插法创建单链表(带头结点&&不带头结点)
- 按位序插入(带头结点&&不带头结点)
- 单链表指定结点的前插操作(带头结点)
- 按位序删除
- 按值删除(带头结点&&不带头结点)
创建单链表
1.头插法创建单链表(带头结点&&不带头结点)
LinkList List_HeadInsert(LinkList *L)
{
LNode *s;
int x;
*L = (LNode *)malloc(sizeof(LNode));
(*L)->next = NULL;
scanf("%d", &x);
while (x != 9999)
{
s = (LNode *)malloc(sizeof(LNode));
s->data = x;
s->next = (*L)->next;
(*L)->next = s;
scanf("%d", &x);
}
return *L;
}
LinkList List_HeadInsertNo(LinkList *L)
{
LNode *s;
int x;
*L = (LinkList)malloc(sizeof(LNode));
*L = NULL;
scanf("%d", &x);
while (x != 999)
{
s = (LNode *)calloc(1, sizeof(LNode));
s->data = x;
s->next = *L;
*L = s;
scanf("%d", &x);
}
}
2.尾插法创建单链表(带头结点&&不带头结点)
LinkList List_TailInsert(LinkList *L)
{
int x;
*L = (LNode *)malloc(sizeof(LNode));
(*L)->next = NULL;
LNode *s, *r = *L;
scanf("%d", &x);
while (x != 999)
{
s = (LNode *)malloc(sizeof(LNode));
s->data = x;
r->next = s;
r = s;
scanf("%d", &x);
}
r->next = NULL;
return *L;
}
LinkList List_TailInsertNO(LinkList *L)
{
int x;
*L = (LinkList)malloc(sizeof(LNode));
*L = NULL;
LNode *s, *r;
scanf("%d", &x);
while (x != 999)
{
s = (LNode *)malloc(sizeof(LNode));
s->data = x;
if (*L == NULL)
{
*L = s;
r = *L;
}
else
{
r->next = s;
r = s;
}
scanf("%d", &x);
}
r->next = NULL;
return *L;
}
按位序插入(带头结点&&不带头结点)
bool ListInsert(LinkList *L, int i, int e)
{
if (i < 1)
return false;
LNode *p;
int j = 0;
p = *L;
while (p != NULL && j < i - 1)
{
p = p->next;
j++;
}
if (p == NULL)
return false;
LNode *s = (LNode *)malloc(sizeof(LNode));
s->data = e;
s->next = p->next;
p->next = s;
return true;
}
bool ListInsert(LinkList *L, int i, int e)
{
if (i < 1)
return false;
if (i == 1)
{
LNode *s = (LNode *)malloc(sizeof(LNode));
s->data = e;
s->next = *L;
*L = s;
return true;
}
LNode *p;
int j = 1;
p = *L;
while (p != NULL && j < i - 1)
{
p = p->next;
j++;
}
if (p == NULL)
return false;
LNode *s = (LNode *)malloc(sizeof(LNode));
s->data = e;
s->next = p->next;
p->next = s;
return true;
}
单链表指定结点的前插操作(带头结点)
bool InserPriorNode(LNode *p, LNode *s)
{
if (p == NULL || s == NULL)
return false;
s->next = p->next;
p->next = s;
int temp = p->data;
p->data = s->data;
s->data = temp;
return true;
}
按位序删除
bool ListDelete(LinkList *L, int i, int *e)
{
if (i < 1)
return false;
LNode *p = *L;
int j = 0;
while (p != NULL && j < i - 1)
{
p = p->next;
j++;
}
if (p == NULL)
return false;
if (p->next == NULL)
return false;
LNode *q = p->next;
*e = q->data;
p->next = q->next;
free(q);
return true;
}
按值删除(带头结点&&不带头结点)
LinkList ListDelete_1(LinkList *L, int e)
{
LNode *p = *L;
if (p == NULL)
return false;
LNode *q = p->next;
while (q != NULL)
{
if (q->data == e)
{
p->next = q->next;
q = q->next;
}
else
{
p = q;
q = q->next;
}
}
return *L;
}
void deleteNode(LinkList *L, int value)
{
LNode *prev = NULL;
LNode *current = *L;
while (current != NULL && current->data == value)
{
LNode *q = current;
*L = current->next;
current = current->next;
free(q);
}
while (current != NULL)
{
if (current->data != value)
{
prev = current;
current = current->next;
}
else
{
LNode *q = current;
prev->next = current->next;
current = current->next;
free(q);
}
}
}