双向链表的插入(及其疑问)

本人刚学,有很多问题,希望大家帮忙指出,谢谢

 

#include<stdio.h>
#include<stdlib.h>
#define datatype int

typedef struct node
{
datatype data;
struct node *prev;
struct node *next;
}listnode,*mylist;

//双向链表的初始化

mylist init(void)
{
mylist list=(mylist )malloc(sizeof(listnode));//分配内存
if(list!=NULL)
list->prev=list->next=list;//定义双向循环链表
return list;
}

mylist node(datatype data)
{
mylist newnode=(mylist)malloc(sizeof(listnode));
if(newnode!=NULL)
{
newnode->data=data;
newnode->prev=NULL;
newnode->next=NULL;
}
return newnode;
}//创建新节点
void insert(mylist new1,mylist list)
{
if(new1==NULL || list==NULL)
{
return ;
}
new1->prev=list;
new1->next=list->next;
list->next=new1;
list->next->prev=new1;
printf("----insert");
}//将new1节点插入list节点后面(后插)
void show(mylist list)
{
mylist tmp=list->next;
while(tmp != list)
{
printf("%d",tmp->data);
tmp=tmp->next;
}
printf("\n");
}//显示链表
int main()
{
mylist sxlist=init();
int n,j;
printf("输入n\n");
scanf("%d",&n);
for(j=1;j<n;j++)
{
mylist Newnode=node(j);
insert(Newnode,sxlist);
}
show(sxlist);
while(1);
return 0;
}

1、按照这个方式是可以插入并显示的

2、可是把for循环改成for(j=n;j<1;j--)
{
mylist Newnode=node(j);
insert(Newnode,sxlist);
}就不行啦,不知道为什么。

3、如果把main函数换成

int main()
{
mylist sxlist=init();
int n,j;
printf("输入n\n");
scanf("%d",&n);
while(n)
{
printf("输入j\n");
scanf("%d",&j);
mylist Newnode=node(j);
insert(Newnode,sxlist);
printf("%d",sxlist->data);
sxlist=sxlist->next;
n--;
}
show(sxlist);
return 0;
}

第一个节点就会显示不正常。

4、在三的基础上改显示代码

 printf("%d",tmp->next->data);

显示链表就没问题。

(黑人问号?????)

转载于:https://www.cnblogs.com/zwjj/p/9769882.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值