整理一下硬盘里关于链表的知识,温故而知新。
链表是一种物理存储单元上非连续、非顺序的存储结构。其特点是有头尾结点,除头结点外,其它结点都只有一个前驱,除尾结点外,其它结点都只有一个后继。
常见的链表有单向链表,双向链表,循环链表。
单向链表的结构一般这样写
typedef struct listnode
{
int val;
struct listnode *next;
}List;单向链表的操作:
创建链表
List* create_list(int val)
{
List *head = (List *)malloc(sizeof(List)/sizeof(char));
if(NULL == head)
{
return NULL;
}
head->val = val;
head->next = NULL;
return head;
}List* insert_listnode(List *head, int val)
{
List *temp;
if(NULL == head)
{
return NULL;
}
temp = (List *)malloc(sizeof(List)/sizeof(char));
temp->val = val;
temp->next = head;
head = temp;
return head;
}void delete_list(List *head)
{
List *temp = NULL;
if(head != NULL)
{
temp = head;
head = head->next;
free(temp);
temp = NULL;
delete_list(head);
}
}int count_listnode(List *head)
{
static int count = 0;
if(NULL != head)
{
count += 1;
if(head->next != NULL)
{
count_listnode(head->next);
}
return count;
}
}void fdprint_listnode(List *head)
{
if(NULL != head)
{
printf("%d\t",head->val);
if(head->next != NULL)
{
fdprint_listnode(head->next);
}
}
}void bkprint_listnode(List *head)
{
if(head != NULL)
{
if(head->next != NULL)
{
bkprint_listnode(head->next);
}
printf("%d\t",head->val);
}
}
原文:http://blog.csdn.net/losophy/article/details/19702093