1. 删除指定的值
#include <stdio.h>
#include <stdlib.h>
struct node{
int data;
struct node* next;
};
typedef struct node Ele;
void print(Ele*head){
Ele *p = head;
while(p){
printf("%3d", p->data);
p = p->next;
}
printf("\n");
}
Ele* Creatlink(int a[],int N){
Ele *head = NULL, *tail, *newP;
for (int i = 0; i < N; i++){
newP = (Ele*)malloc(sizeof(Ele));
newP->data = a[i];
newP->next = NULL;
if (!head){
head = tail = newP;
}else{
tail->next = newP;
tail = newP;
}
}
return head;
}
Ele* del (Ele*head, int key){
Ele *p = head, *q;
while(p){
if (p->data == key){
if(head == p){
head = head->next;
free(p);
p = head;
} else {
q->next = p->next;
free(p);
p = q->next;
}
} else {
if(head == p){
q = head;
p = q->next;
}else{
q = q->next;
p = q->next;
}
}
}
return head;
}
int main(void){
int a[] = {2,2,1,2,3,4,2,2,5,3,4,8,9,2,2,2,5,4,6,7,5,2,2};
Ele *head;
int len = sizeof(a)/sizeof(a[0]);
head = Creatlink(a, len);
head = del(head,2);
print(head);
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200729222129362.png)
2. 有序链表去重
#include <stdio.h>
#include <stdlib.h>
struct node{
int data;
struct node* next;
};
typedef struct node Ele;
void print(Ele*head){
Ele *p = head;
while(p){
printf("%3d", p->data);
p = p->next;
}
printf("\n");
}
Ele* Creatlink(int a[],int N){
Ele *head = NULL, *tail, *newP;
for (int i = 0; i < N; i++){
newP = (Ele*)malloc(sizeof(Ele));
newP->data = a[i];
newP->next = NULL;
if (!head){
head = tail = newP;
}else{
tail->next = newP;
tail = newP;
}
}
return head;
}
void del (Ele*head){
Ele *p = head->next, *q = head;
while(p){
if(q->data == p->data){
q->next = p->next;
free(p);
p = q->next;
}else{
q = q->next;
p = p->next;
}
}
}
int main(void){
int a[] = {1,1,1,2,3,5,5,5,6,6,7,7,7,7,8,8,9,9,10,10};
Ele *head;
int len = sizeof(a)/sizeof(a[0]);
head = Creatlink(a, len);
del(head);
print(head);
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/2020072922220297.png)
3. 无序链表去重
#include <stdio.h>
#include <stdlib.h>
struct node{
int data;
struct node* next;
};
typedef struct node Ele;
void print(Ele*head){
Ele *p = head;
while(p){
printf("%3d", p->data);
p = p->next;
}
printf("\n");
}
Ele* Creatlink(int a[],int N){
Ele *head = NULL, *tail, *newP;
for (int i = 0; i < N; i++){
newP = (Ele*)malloc(sizeof(Ele));
newP->data = a[i];
newP->next = NULL;
if (!head){
head = tail = newP;
}else{
tail->next = newP;
tail = newP;
}
}
return head;
}
void del (Ele*head){
Ele *pKey = head, *q = head, *p = q->next;
while(pKey){
q = pKey;
p = q->next;
while(p){
if(pKey->data == p->data){
q->next = p->next;
free(p);
p = q->next;
}else {
q = q->next;
p = q->next;
}
}
pKey = pKey->next;
}
}
int main(void){
int a[] = {3,3,3,5,5,5,4,4,4,1,2,3,4,6,5,7,9,10,10,8,8,8,6};
Ele *head;
int len = sizeof(a)/sizeof(a[0]);
head = Creatlink(a, len);
del(head);
print(head);
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200729222033757.png)