C在链接列表的开头插入节点

时间:2015-04-20 22:35:58

标签: c list insert structure element

我有一个像这样的函数,它应该按PID编号按升序将给定节点插入到链表中。

如果PID数字是数组中最低的,那么它自然会将新元素作为列表中的第一个。

问题在于它没有按预期工作。我使用if()语句检查计数是否为0,因为如果是,那么我的新元素的PID不大于索引为0的元素。因此,必须在索引0处插入新元素。

现在我在if中的代码没有正确地添加元素,有时当我尝试不同的代码时,我得到了分段错误。

注意: 我无法更改任何功能参数,必须使用我为结构提供的功能。

struct PCB
{
    struct PCB *Next_PCB ;
    int PID ;
};

void insert_ordered (struct PCB *Head, struct PCB *Add)
{
    struct PCB *tmp1 = Head;
    if (Head->PID == 0) {
        Head->PID = Add->PID;
    } else {
        if (Head->Next_PCB == NULL) {
            Head->Next_PCB = Add;
        } else {
            int count = 0;
            while (Head != NULL) {
                if (Add->PID > Head->PID) {
                    if (Head->Next_PCB != NULL) {
                        Head = Head->Next_PCB;
                        count++;
                    } else {
                        Head->Next_PCB = Add;
                        break;
                    }
                } else if (Add->PID == Head->PID) {
                    Add->Next_PCB = Head->Next_PCB;
                    Head->Next_PCB = Add;
                    break;
                } else if (Add->PID < Head->PID) {
                    if (Add->PID == 1 || Add->PID == 2) {
                        printf("found 1 or 2");
                        printf("count: %d", count);
                    }
                    int ct = 0;
                    while (tmp != NULL) {
                        if (ct == 0) {

                            /* ERROR!!!!!!!!*/

                            Add->Next_PCB = (*tmp1);
                            (*tmp1) = Add;
                            break;
                        }
                        if (ct == (count - 1)) {
                            Add->Next_PCB = Head;
                            tmp->Next_PCB = Add;
                            break;
                        }
                        tmp = tmp->Next_PCB;
                        ct++;
                    }
                    break;
                }
            }
        }
    }
    printf("pid : %d\n", Add->PID);
}

提前致谢!

0 个答案:

没有答案