| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
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;  
 
 
 |   
 
 
 
 |