删除单链表奇数节点,并求和
将数据带进去都是对的,可是就是说运行错误。是漏了哪一个环节
```c
#include <stdio.h>
#include <stdlib.h>
struct ListNode {
int data;
struct ListNode *next;
};
struct ListNode *createfromtail();
struct ListNode *deleteodd( struct ListNode *head );
int addlist( struct ListNode *head );
int main()
{
struct ListNode *head;
int sum;
head = createfromtail();
head = deleteodd(head);
sum=addlist(head);
printf("%d\n",sum);
return 0;
}
struct ListNode *createfromtail()
{
struct ListNode *head=NULL,*p,*q;
int i,s;
while(1)
{
scanf("%d",&s);
if(s==-1) break;
p=(struct ListNode *)malloc(sizeof(struct ListNode));
p->data=s;
p->next=NULL;
if(head==NULL)
{
head=p;
q=p;
}
else
{
q->next=p;
q=p;
}
}
return head;
}
int addlist( struct ListNode *head )
{
struct ListNode * p=head;
int sum=0;
while(p!=NULL)
{
sum=sum+p->data;
p=p->next;
}
return sum;
}
struct ListNode *deleteodd( struct ListNode *head ){
struct ListNode*p,*q;
p = head;
q = p;
int i;
i = 1;
while(p){
if((p->data%2==1||p->data%2==-1)&&i==1){
head = head->next;
p = head;
q = p;
}
if((p->data%2==1||p->data%2==-1)&&i!=1){
if(p->next==NULL){
p->data=0;
break;
}
q->next = p->next;
p = p->next;
}
if(p->data%2==0||p->data==0){
q = p;
p = p->next;
i = 2;}
}
return head;
}
```
删除单链表奇数节点,是结点位置为奇数还是结点的数据域值为奇数?
输入值中有-1将终止输入,后面的输入无效。
删除的节点没有free
最后,感谢大家的观看,有什么问题都可以在下方评论区评论或者公众号后台回复,看到我就会回复大家!
在这里祝各位健健康康过一个充实的假期!
感谢指出我错误的微信网友: 大异小同 。
本次修改内容:
1. 1-1中的代码,for循环的循环控制 i < target / 2 改为 i <= target
错误情况:当 target == 4 时,target / 2 的值是 2,i 从 2开始,如果 循环控制是:i < target / 2, 则不会进入 for 循环,所以会将 4 误判为素数
2. sqrt 函数的返回值是 double 类型。
将 i <= sqrt(target) 改为 i <= (int)sqrt(target)
sqrt 函数的函数原型:double sqrt(double arg);
2020 - 2 - 24 日修改: