list_insert : 输入node,data,其中node为指向链表头结点的指针,data为要插入到链表中的值,该函数生成新的节点保存data,并将新节点插入到链表头部。
list_display : 输入node为链表的头部,该函数顺序打印整个链表。
list_reverse : 输入node为指向链表头节点的指针,该函数将链表逆序。
list_reverserec: 该函数的功能同样是将链表逆序,不过是递归版本。
#include <stdio.h>
#include <malloc.h>
typedef struct _node {
struct _node *m_link;
int m_data;
}node_t;
void list_insert (node_t **node, int data) {
node_t *tmp = (node_t*)malloc(sizeof(node_t));
tmp->m_data = data;
tmp->m_link = *node;
*node = tmp;
}
void list_display (node_t *node) {
while (node) {
printf ("%d ", node->m_data);
node = node->m_link;
}
printf ("\n");
}
void list_reverse (node_t **node) {
node_t *mid, *pre, *post;
pre = 0;
mid = *node;
while (mid) {
post = mid->m_link;
mid->m_link = pre;
pre = mid;
mid = post;
}
*node = pre;
}
node_t* list_reserserec (node_t *pre, node_t *node) {
node_t *tmp;
if (!node->m_link) {
node->m_link = pre;
return node;
}
tmp = node->m_link;
node->m_link = pre;
return list_reserserec (node, tmp);
}
int main (void) {
node_t *lst = 0;
node_t *lst1 = 0;
list_insert (&lst, 4);
list_insert (&lst, 8);
list_insert (&lst, 10);
list_insert (&lst, 1);
list_display (lst);
printf ("==\n");
list_reverse (&lst);
list_display (lst);
lst1 = list_reserserec (0, lst);
list_display (lst1);
return 0;
}