#include <stdio.h>
#include <stdlib.h>
struct ListNode {
int data;
struct ListNode *next;
};
void printlist( struct ListNode *L ){
struct ListNode *p = L;
while (p) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
struct ListNode *readlist(int n){
struct ListNode *head,*p,*last;
int i;
head=(struct ListNode *)malloc(sizeof(struct ListNode));
head->next=NULL;
last=head;
for(i=1;i<=n;i++){
p=(struct ListNode *)malloc(sizeof(struct ListNode));
scanf("%d",&p->data);
p->next=NULL;
last->next=p;
last=p; }
return head;
}
struct ListNode *deletem( struct ListNode *L, int k ){
struct ListNode *p,*pre;
p=L;
pre=NULL;
while(p) {
if(p->data==k) {
if(pre)
pre->next=p->next;
else
L=p->next; }
else pre=p;
p=p->next; }
free(p);
return L;}
int main(){
int n;
int k;
scanf("%d", &n);
scanf("%d", &k);
struct ListNode *head;
head=readlist(n);
struct ListNode *L;
L= deletem(L, k);
printlist(L);
return 0;}
链表有头节点, 第一个数据节点是L->next
p = L;
改成
p = L->next;
L = deletem(L, k); //deletem 中 L 改成 head
L = deletem(head, k);
你题目的解答代码如下:
#include <stdio.h>
#include <stdlib.h>
struct ListNode
{
int data;
struct ListNode *next;
};
void printlist(struct ListNode *L)
{
struct ListNode *p = L->next; //链表有头节点, 第一个数据节点是L->next
while (p)
{
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
struct ListNode *readlist(int n)
{
struct ListNode *head, *p, *last;
int i;
head = (struct ListNode *)malloc(sizeof(struct ListNode));
head->next = NULL;
last = head;
for (i = 1; i <= n; i++)
{
p = (struct ListNode *)malloc(sizeof(struct ListNode));
scanf("%d", &p->data);
p->next = NULL;
last->next = p;
last = p;
}
return head;
}
struct ListNode *deletem(struct ListNode *L, int k)
{
struct ListNode *p, *pre;
p = L->next; //链表有头节点, 第一个数据节点是L->next
pre = L;
while (p)
{
if (p->data == k)
{
pre->next = p->next;
break;
}
else
pre = p;
p = p->next;
}
free(p);
return L;
}
int main()
{
int n;
int k;
scanf("%d", &n);
scanf("%d", &k);
struct ListNode *head;
head = readlist(n);
struct ListNode *L;
L = deletem(head, k); //deletem 中 L 改成 head
printlist(L);
return 0;
}
如果要链表无头节点, 改成
#include <stdio.h>
#include <stdlib.h>
struct ListNode
{
int data;
struct ListNode *next;
};
void printlist(struct ListNode *L)
{
struct ListNode *p = L;
while (p)
{
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
struct ListNode *readlist(int n)
{
//如果要链表无头节点, 改成
struct ListNode *head, *p, *last;
int i;
last = NULL;
for (i = 1; i <= n; i++)
{
p = (struct ListNode *)malloc(sizeof(struct ListNode));
scanf("%d", &p->data);
p->next = NULL;
if (last)
last->next = p;
else
head = p;
last = p;
}
return head;
}
struct ListNode *deletem(struct ListNode *L, int k)
{
struct ListNode *p, *pre;
p = L;
pre = NULL;
while (p)
{
if (p->data == k)
{
if (pre)
pre->next = p->next;
else
L = p->next;
break;
}
else
pre = p;
p = p->next;
}
free(p);
return L;
}
int main()
{
int n;
int k;
scanf("%d", &n);
scanf("%d", &k);
struct ListNode *head;
head = readlist(n);
struct ListNode *L;
L = deletem(head, k); //deletem 中 L 改成 head
printlist(L);
return 0;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!