【练习】单链表逆置

来源:互联网 发布:反射镜的琼斯矢量矩阵 编辑:程序博客网 时间:2024/06/08 15:14
/* * szl_linked_list_reversion.c */#include <stdio.h>#include <stdlib.h>typedef struct _tag_szl_node{int data;struct _tag_szl_node * link;}szl_node, * p_szl_node;typedef p_szl_node szl_list;static szl_list list_reversion (szl_list * list); /* reverse a single linked list */int main (int argc, char ** argv){szl_list list = NULL;szl_list list_count = NULL;int n_input = 0;printf ("input: \n");scanf ("%d", &n_input);while (-1 != n_input){if (!list){list = (p_szl_node)malloc (sizeof (szl_node));list->data = n_input;list->link = NULL;list_count = list;}else{list_count->link = (p_szl_node)malloc (sizeof (szl_node));list_count = list_count->link;list_count->data = n_input;list_count->link = NULL;}scanf ("%d", &n_input);}puts ("The input order: ");list_count = list;while (list_count){printf ("%d\t", list_count->data);list_count = list_count->link;}puts ("");/* recursion */list_reversion (&list);puts ("After reversion: ");list_count = list;while (list_count){printf ("%d\t", list_count->data);list_count = list_count->link;}puts ("");while (list){list_count = list;list = list->link;free (list_count);list_count = NULL;}return 0;}static szl_list list_reversion (szl_list * list){szl_list list_p = NULL;szl_list list_q = NULL;szl_list list_r = NULL;if (!(*list)){return (*list);}else if (!((*list)->link)){return (*list);}else{list_p = (*list);list_q = list_p->link;list_p->link = NULL;while(list_q){list_r = list_q->link;list_q->link = list_p;list_p = list_q;list_q = list_r;}return ((*list) = list_p); }}

原创粉丝点击