|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
//写了个双链表中相邻节点位置调换的问题,出了点错误,输出不对,调试后错误点见代码。
#include <stdio.h>
#include <stdlib.h>
typedef struct Node
{
int data;
struct Node *next;
struct Node *prior;
}Pnode,*Dlinklist;
Dlinklist creat()
{
Dlinklist p1,p,head;
p=(Dlinklist)malloc(sizeof(Pnode));
p->next=NULL;
p->prior=NULL;
head=p;
p1=p;
printf("请输入数据:");
scanf("%d",&p->data);
while(1)
{
p=(Dlinklist)malloc(sizeof(Pnode));
printf("请输入数据:");
scanf("%d",&p->data);
if(p->data==0)
break;
p1->next=p;
p->prior=p1;
p->next=NULL;
p1=p;
}
return head;
}
Dlinklist exchange(Dlinklist p,int pos)
{
int i=0;
Dlinklist p1;
p1=p;
if(pos<=1)
{
printf("ERROR!!\n");
exit(-1);
}
while(1)
{
i++;
if(i==pos)
{
p1->prior->next=p1->next; //问题出在一下四行,我经过检查没发现问题所在,希望大佬帮忙指正。创建函数没有问题。
p1->next->prior=p1->prior;
p1->next=p1->prior;
p1->prior=p1->prior->prior;
break;
}
else
{
p1=p1->next;
}
}
return p;
}
void print(Dlinklist head)
{
Dlinklist p;
p=head;
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
}
int main()
{
int pos;
Dlinklist head;
head=creat();
printf("1\n\n");
printf("请输入数据:");
scanf("%d",&pos);
printf("3\n\n");
head=exchange(head,pos);
printf("2 \n\n");
print(head);
}
hhhh还好还好 发表于 2018-9-18 22:25
不,如果是输入1 2 3 4 5,删除第三个的话,输出应该是1 3 2 4 5
没有删除好不好?还是 5 个元素。
s = p1->prior;
s->next = p1->next;
s->prior->next = p1;
p1->next = s;
p1->prior = s->prior;
s->prior = p1;
s->next->prior = s;
|
|