我想成对交换链接列表术语。
这是我的代码。它给了我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;
}
答案 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)