主题:C语言 循环链表的问题
这个程序,插入新元素实在表尾插入还是表头插入啊?
插入两个元素后, l指向的节点应该是什么?
linklist p=l->next->next; 这是第一个节点吗?
[code=c]
#include<stdio.h>
#include<math.h>
#include <stdlib.h>
//node ****************************************
struct node
{
int data;
struct node *next;
};
typedef struct node *linklist;
void visit(char e)
{
printf("%c",e);
}
//init*********************************************
int initlist(linklist *l)
{
//l=(linklist *)malloc(sizeof(linklist));
*l=(linklist)malloc(sizeof(struct node));
if(!*l)
exit(OVERFLOW);
(*l)->next=*l;
return 1;
}
//length*****************
int listlength(linklist l)
{
int i=0;
linklist p=l->next;
while(p!=l)
{
p=p->next;
i++;
}
return i;
}
//insert插入******************
int insert(linklist *l,int i,char e)
{
//在第i个位置 前 插入元素
linklist p=(*l)->next,s;
int j=0;
if(i<=0||i>listlength(*l)+1)
return 0;
while(j<i-1)
{
p=p->next;
j++;
}
s=(linklist)malloc(sizeof(struct node));
s->data=e;
s->next=p->next;
p->next=s;
if(p==*l)
*l=s;
return 1;
}
//遍历单循环聊表
int traverse(linklist l)
{
[color=FF0000]linklist p=l->next->next;//指向第一个节点[/color]
while(p!=l->next)
{
visit(p->data);
p=p->next;
}
printf("\n");
return 1;
}
int main()
{
linklist l;
char e;
i=initlist(&l);
printf("依次在单链表中插入 1,2\n");
insert(&l,1,'a');
insert(&l,2,'b');
traverse(l);
system("pause");
return 0;
}
[/code]