鱼C论坛

 找回密码
 立即注册
查看: 3635|回复: 5

关于课时22双向链表的问题

[复制链接]
发表于 2016-8-4 12:10:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
#include<stdlib.h>

#define OK    1
#define ERROR 0

typedef int status;

typedef char QQQ;

typedef struct Node
{
        QQQ data;
        struct Node *prior;
        struct Node *next;
}pNode,*linklist;

status initlist(linklist *L)
{
        pNode *p,*q;
       
        int i;
       
        *L=(linklist)malloc(sizeof(pNode));
        if(!(*L))
        {
                return ERROR;
        }
       
        (*L)->next=(*L)->prior=NULL;
        p=(*L);
        for(i=0;i<26;i++)
        {
                q=(linklist)malloc(sizeof(pNode));
                if(!(*L))
        {
                return ERROR;
        }
                q->data='A'+i;
                q->prior=p;
                q->next=p->next;
                p->next=q;
               
                p=q;
               
        }
       
        p->next=(*L)->next;
        (*L)->next->prior=p;
       
        return OK;
}
void Caeser(linklist *L,int i)
{
        if(i>0)
        {
                do{
                        (*L)=(*L)->next;
                }while(--i);
        }
        if(i<0)
        {
                do{
                        (*L)=(*L)->next;
                }while(++i);
        }       
}

int main()
{
        linklist L;
        int i,n;
        initlist(&L);
        printf("请输入正数n:\n");
         scanf("%d",&n);
         printf("\n");
        Caeser(&L,n);
        for(i=0;i<26;i++)
        {
                  L=L->next;
                  printf("%c",L->data);         
         }
         return 0;
}

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-8-4 12:11:12 | 显示全部楼层
    if(i>0)
        {
                do{
                        (*L)=(*L)->next;
                }while(--i);
        }
        if(i<0)
        {
                do{
                        (*L)=(*L)->next;
                }while(++i);
        }      

这一块小甲鱼课堂上的代码两个最后执行结果是一样的。请问怎么能更改
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-8-4 18:22:26 | 显示全部楼层
http://blog.csdn.net/u014488381/article/details/41280233
楼主想表达的是这个意思吧、创建链表和负数处理都出了问题、看这个博客吧、
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-21 09:45:54 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-7-9 17:05:39 | 显示全部楼层
        if(i<0)
        {
                *L = (*L)->next->piror;
                while (i)
                {
                        *L = (*L)->piror;
                        i++;
                }
        }
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-15 23:17:56 | 显示全部楼层
叫我ace 发表于 2017-7-9 17:05
if(inext->piror;
                while (i)
                {

鱼油你好,我也被这个问题困扰了好久,后来仔细阅读代码发现
初始化(*L)指针时其前驱后继都指向NULL,
初始化完毕后(*L)的前驱仍指向NULL,所以编译器会报错,
做法:将指针(*L)指向下一个进入循环,那么(*L)本身不参与循环也就没有空指针了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-20 13:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表