先前做的有问题,重制版应该没有问题了。
思路非常简单,就是找出值为a和值为b的节点,找出a的前驱节点q,b的后继节点q1,直接让q指向q1,然后再将节点a到节点b之间的节点依次访问删除即可。
#include<stdio.h>
#include<math.h>
#include<malloc.h>
typedef struct node {
int data;
struct node* next;
}node;
void Delete(node* head,int a,int b) {
if (head->data == a) {
head = head->next;
}
node* p = head;
node* q = NULL;
while (p->data != a) {
q = p;
p = p->next;
}
node* p1 = head;
node* q1 = NULL;
while (p1->data != b) {
p1 = p1->next;
}
q1 = p1->next;
q->next = q1;
head = p; node* m;
while (head->data != b) {
m = head->next;
free(head);
head = m;
}
free(head);
}
int main() {
node* a = (node*)malloc(sizeof(node)); a->data = 1;
node* b = (node*)malloc(sizeof(node)); b->data = 2;
node* c = (node*)malloc(sizeof(node)); c->data = 3;
node* d = (node*)malloc(sizeof(node)); d->data = 4;
a->next = b; b->next = c; c->next = d; d->next = NULL;
Delete(a, 2, 3);
node* p = (node*)malloc(sizeof(node));
p = a;
while (p) {
printf("%d", p->data);
p = p->next;
}
return 0;
}