码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-10-11 01:51:30      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:为什么   height   --   基础上   amp   eof   sizeof   nod   insert   

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

 

#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);

显示链表就没问题。

技术分享图片

(黑人问号?????)

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

标签:为什么   height   --   基础上   amp   eof   sizeof   nod   insert   

原文地址:https://www.cnblogs.com/zwjj/p/9769882.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!