c - 在给定链表中添加包含整数值的替代节点?

标签 c singly-linked-list

<分区>

您好,我写了一个代码来添加替代节点,该节点在单链表中包含整数值。我的代码崩溃了,请帮我修复它。

例子让单链表中有 6 个节点 3 5 8 6 4 9 那么 o/p 应该是 3+8+4 和 5+6+9,我想我的方法是错误的,请帮助我修复它。在下面的代码中,我只返回一个替代值,即 3+8+4?

void add(struct st **ptr)
{
    struct st *curr,*prev;
    curr=*ptr;

    while(curr->next!=NULL)
    {
        if(curr->next->next->data!=NULL) //checking alternative node is present or
            //or not and  to avoid crash
        {

            sum= curr->data  +  curr->next->next->data;
        }

        else
        {
            sum= curr->data;
        }
        curr= curr->next;
    }

    prev=*ptr;

    while(prev->next !=null)
    {
        prev=prev->next;

        if(prev->next->next->data!=NULL)
        {
            sum=prev->data+prev->next->next->data;
        }

        else
        {
            sum=prev->data;
        }
    }

    return sum;    
}

最佳答案

首先,一个函数不可能返回两次。您可以使用引用调用作为它的替代方法。在函数调用之前,您可以为两个总和创建两个变量,将它们初始化为零并将它们作为引用发送。

int sum_even = 0; //sum of elements at even position
int sum_odd = 0; //sum of elements at odd position
add(&start, &sum_even, &sum_odd); // call by reference
//sum_even and sum_odd will have the respective sums

现在,对于链表上的问题,建议您拿着笔和纸坐下来尝试跟踪您编写的每一行代码。测试边界条件是必不可少的。 我已经为您的问题编写了一个可能的解决方案。

void add(struct st **ptr, int *sum_even, int *sum_odd)
{
    struct st *even, *odd;
    even = *ptr;
    if(even->next) odd = even->next;
    else odd = NULL;
    while(even != NULL)
    {
        *sum_even += even->data;
        if(even->next == NULL) break;
        even = even->next->next;
    }
    while(odd != NULL)
    {
        *sum_odd += odd->data;
        if(odd->next == NULL) break;
        odd = odd->next->next;
    }

}

关于c - 在给定链表中添加包含整数值的替代节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24840480/

相关文章:

c - 简单链接列表 (FILO) 不起作用

c - 不允许指向不完整类类型的指针 - 单链表

在 C linux 中关闭服务器套接字

将 int 转换为 double

java - 自定义 LinkedList 中的 addFirst()

c++ - 编写 bool 表达式来判断列表是否在增加

C Socket 程序 - 如何在更新从标准输出读取时接受用户输入?

c - 为什么在 Linux mint 15 中执行 C 程序时会出现错误 "bash: ./a.out: Permission denied"

c - 'struct structVarable' 类型的空指针内的成员访问

python - 删除单链表中的最后一个节点