将节点添加到升序链接列表
我在这里见过一些类似的东西,但那对我没有帮助。所以无论我错在哪里,请纠正我。

        #include<stdio.h>
        #include<stdlib.h>
        struct node
        {
          int data;
          struct node* link;
        };
         struct node* head = NULL;
        void add(int);
        void print();
        int main()
        {
          add(1); print();
          add(2); print();
          add(5); print();
          add(4); print();
          add(3); print();
        return 0;
        }
***/* if list is empty or if new node is to be inserted before the first node*/***
         void add( int num)
        {
           struct node* temp;
           temp =  head;
           struct node* newNode = (struct node*)malloc(sizeof(struct node));
           newNode->data = num;
           newNode->link = NULL;
           if((head == NULL)||( head->data > num))
               {
                 newNode->link = head;
                 head = newNode;
               }
           else
              {
  ***/* traverse the entire linked list to search the position to insert the new node*/***
               while(temp!=NULL)
               {
                if(temp->data <= num && ( temp->link->data > num || temp->link == NULL))
                    {
                       newNode->link = temp->link;
                       temp->link = newNode;
                       return;
                    }
                  temp= temp->link;
                }
               }
             }
    ***/*Display the content of the linked list*/***
          void print()
        {
           struct node* temp;
           temp = head;
           while(temp!=NULL)
            {
              printf("%d", temp->data);
              temp=temp->link;
            }
           printf("\n");
        }

运行此代码时,o/p是:
1个
分段故障(堆芯转储)
请帮助我,如何解决这个问题

最佳答案

罪魁祸首是这句话:

if(temp->data <= num && ( temp->link->data > num || temp->link == NULL))

在评估之前,您没有检查temp->link是否不是NULL。更改为:
if(temp->data <= num && ( temp->link == NULL || temp->link->data > num))

利用短路评估使其安全。

10-01 08:43