整理一下硬盘里关于链表的知识,温故而知新。
链表是一种物理存储单元上非连续、非顺序的存储结构。其特点是有头尾结点,除头结点外,其它结点都只有一个前驱,除尾结点外,其它结点都只有一个后继。
常见的链表有单向链表,双向链表,循环链表。
单向链表的结构一般这样写
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