#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;}
编译成功了,但是输出有问题,为什么啊
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
2条回答 默认 最新
CSDN专家-天际的海浪 2022-03-28 00:58关注链表有头节点, 第一个数据节点是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; }如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录