我想成对交换链表名词,我的代码给了我分段错误

时间:2014-02-07 08:33:39

标签: c linked-list

我想成对交换链接列表术语。

这是我的代码。它给了我Segmentation Fault-core dumped

#include <stdio.h>
#include <stdlib.h>
struct node 
{
    int data;
    struct node *next;
}*head;
void insert(struct node *n)
{
    int  num;
    printf("Enter a number : ");
    scanf("%d",&num);
    struct node *temp;
    temp=(struct node *)malloc(sizeof(struct node));
    temp->data=num;
    if(n==NULL)
    {
        head=temp;
        head->next=NULL;
    }
    else
    {

        temp->next=head;
        head=temp;
    }

}
int main()
{
    struct node *n;
    head=NULL;
    n=head;
    int i;
    for(i=0;i<6;i++)
    {

        insert(n);
        n=head;
    }
    display(n);
    pairswap(n);
    display(n);

}
void display(struct node *n)
{
    struct node *temp;
    temp=n;
    while(temp!=NULL)
    {
        printf("%d ",temp->data);
        temp=temp->next;
    }
}
void pairswap(struct node *n)
{
    struct node *temp,*temp1,*temp2;
    temp=n;
    temp1=temp->next;
    while(temp!=NULL)
    {
        int tempnum;
        tempnum=temp->data;
        temp->data=temp1->data;
        temp1->data=tempnum;
        if(temp==n)
        {
            head=temp;
            head->next=temp1;
        }
        else
        {
            temp2->next=temp;
            temp2->next->next=temp1;
        }
        temp2=temp1;
        temp=(temp->next)->next;
        temp1=temp->next;
    }
    n=head;
}

2 个答案:

答案 0 :(得分:1)

请了解调试器。

列表末尾某处的值 (temp->next)->next 是NULL,您将它放在变量temp中。

在进行此分配temp1=temp->next之前,您需要检查temp是否为NULL并采取适当的措施。

答案 1 :(得分:0)

问题是pairwap功能。在while循环中,您使用的是条件: 而(温度!= NULL)

并在您指定的循环内: 温度=(TEMP-&gt;下面) - &gt;接着

,因为你试图取消引用NULL指针,它将在第二个最后一个节点上崩溃。

使用以下条件: 而((TEMP-&gt;下面) - &GT;!下一= NULL) 要么 while(temp1-&gt; next!= NULL)