2018-03-26

作者: 张钰沛 | 来源:发表于2018-03-26 21:40 被阅读0次

数据结构:单向链表

 #include#include//实现一个简单的单向链表 (不带头节点的链表,只有一个头指针)

struct Node{                                                  

int val;

struct Node *next;

};

struct Node *head;

void create_list()

{

head = NULL;

return ;

}

/*参数1:value表示要插入的数据

返回值:0表示成功,-1表示失败

功能描述:插入链表,采用头插法

*/

int insert_list(int value)

{

//封装一个结点

struct Node *tmp = (struct Node*)malloc(sizeof(struct Node));

if(tmp == NULL)

return -1;

tmp->val = value;

tmp->next = NULL;

//将该结点插入到链表中(头插法)

if(head == NULL)

{//空链表

head = tmp;

}

else

{//非空链表

tmp->next = head;

head = tmp;

}

return 0;

}

void show_list()

{

struct Node *t;

for(t=head;t!=NULL;t=t->next)

{

printf("val:%d\n",t->val);

}

return ;

}

//删除指定位置的节点,返回值0表示成功,-1表示失败

int delete_node(int pos)

{

if(pos <= 0)

{

printf("iput param error....,must > 0\n");

return -1;

}

if(head == NULL)

{

printf("list is empty...\n");

return -1;

}

//删除的是第一个节点

if(pos == 1)

{

struct Node *p = head;

head = head->next;

free(p);

return 0;

}

//删除的不是第一个节点

struct Node *before;

struct Node *cur;

int i;

for(before=head,cur=head->next,i=2;(cur!=NULL)&&(i<=pos);++i,before=cur,cur=cur->next)

{

if(pos == i)

{

before->next = cur->next;

free(cur);

break;

}

}

return 0;

}

//判断链表中有没有环,返回0表示没有,返回1表示有

int is_circle_on_list()

{

struct Node *one;

struct Node *two;

if(head == NULL)

{

return 0;

}

//one=two=NULL;这种情况没有

for(one=head,two=head->next;(two!=NULL)||(one!=two);)

{

one = one->next;

two = two->next;

if(two != NULL)

two = two->next;

}

if(two == NULL)

return 0

return 1;

}

int main()

{

//创建一个空链表 (没有存放数据的链表)              

create_list();

//插入链表

insert_list(10);

insert_list(20);

insert_list(30);

insert_list(40);

//遍历链表

show_list();

delete_node(2);

printf("after delete....\n");

show_list();

return 0;

}

相关文章

网友评论

    本文标题:2018-03-26

    本文链接:https://www.haomeiwen.com/subject/mmddcftx.html