日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

单链表逆序、反转

發布時間:2025/3/15 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 单链表逆序、反转 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這幾天找工作,遇到一個挺好玩的筆試題,做完之后想了一個比較簡單的實現方法。

題目是:實現一個單鏈表的逆序操作,如原來是A->B->C,操作完之后是C->B->A.廢話少說,上干貨.

1 /****************************************** 2 * 文件名稱:reverse.c 3 * 文件描述:單鏈表逆序 4 請注意:沒有添加鏈表釋放的函數, 5 這個文件會造成內存泄露,請自己完善 6 * 文件作者:by wangluojisuan, in 2013.11.27 7 * 文件版本:1.2 8 * 修改記錄: 9 *******************************************/ 10 #include <stdio.h> 11 #include <stdlib.h> 12 13 //定義鏈表節點,包含數據域data與指針域next 14 typedef struct _link_node_ { 15 int data; //數據域 16 struct _link_node_ *next; //指針域 17 }linknode_t; 18 19 //定義鏈表,包含鏈表頭及鏈表最大長度,當前長度 20 //鏈表頭head不存儲內容,head->next為第一個節點 21 //建議采用這種鏈表定義方式,可以包含更多的鏈表信息 22 typedef struct _link_list_ { 23 int m_len; //鏈表最大長度 24 int c_len; //鏈表當前長度 25 linknode_t *head; //鏈表頭 26 }linklist_t; 27 28 linklist_t * init_linklist(int len); //初始化鏈表 29 linknode_t * _create_linknode(int value); //創建節點 30 int insert_linklist(linklist_t *list, int value); //鏈表中插入節點 31 void show_linklist(linklist_t *list); //顯示鏈表內容 32 void reverse_linklist(linklist_t *list); //反轉鏈表順序 33 34 int main(void) 35 { 36 //初始化鏈表 37 //輸出內容 38 //反轉鏈表 39 //輸出反轉結果 40 int i = 0; 41 linklist_t *list = NULL; 42 43 list = init_linklist(10); 44 if (NULL == list) 45 exit(-1); 46 47 for (i = 0; i < 10; i++) { 48 if (0 != insert_linklist(list, i)) 49 printf("error\n"); 50 } 51 52 show_linklist(list); 53 54 reverse_linklist(list); 55 show_linklist(list); 56 57 return 0; 58 } 59 60 /*===================================================== 61 * 函數名稱:_create_linknode 62 * 函數功能:創建鏈表節點,節點next指向NULL 63 * 函數參數:int value 節點數據域的內容 64 * 返 回 值:linknode * 創建好的鏈表節點,如果出錯返回NULL 65 * 創 建 人:by wangluojisuan,in 2013.11.27 66 * 修改記錄: 67 ======================================================*/ 68 linknode_t * _create_linknode(int value) 69 { 70 linknode_t *node = NULL; 71 72 node = (linknode_t *)malloc(sizeof(linknode_t)); 73 if (NULL == node) 74 return NULL; 75 76 node->data = value; 77 node->next = NULL; 78 79 return node; 80 } 81 82 /*======================================================= 83 * 函數名稱:init_linklist 84 * 函數功能:初始化一個鏈表,并設置最大鏈表長度 85 * 函數參數:int len 鏈表的最大長度 86 * 返 回 值:linklist * 87 成功 初始化好的鏈表 88 失敗 NULL 89 * 創 建 人:by wangluojisuan,in 2013.11.27 90 * 修改記錄: 91 ========================================================*/ 92 linklist_t * init_linklist(int len) 93 { 94 linklist_t *list = NULL; 95 96 list = (linklist_t *)malloc(sizeof(linklist_t)); 97 if (NULL == list) 98 return NULL; 99 100 list->m_len = len; //設置最大長度 101 list->c_len = 0; //設置當前長度 102 list->head = _create_linknode(0); //頭結點賦值 103 104 return list; 105 } 106 107 /*======================================================= 108 * 函數名稱:insert_linklist 109 * 函數功能:向鏈表中插入數據,使用頭插法,每次新插入的節點都 110 放在head的后面 111 * 函數參數:linklist_t *list 鏈表 112 int value 插入節點數據域值 113 * 返 回 值:int 114 成功 0 115 失敗 -1 116 * 創 建 人:by wangluojisuan,in 2013.11.27 117 * 修改記錄: 118 ========================================================*/ 119 int insert_linklist(linklist_t *list, int value) 120 { 121 linknode_t *node = NULL; 122 123 if (list->c_len >= list->m_len) 124 return -1; 125 126 node = _create_linknode(value); 127 node->next = list->head->next; 128 list->head->next = node; 129 (list->c_len)++; 130 131 return 0; 132 } 133 134 /*======================================================= 135 * 函數名稱:show_linklist 136 * 函數功能:顯示鏈表的內容 137 * 函數參數:linklist_t *list 鏈表 138 * 返 回 值:void 139 * 創 建 人:by wangluojisuan,in 2013.11.27 140 * 修改記錄: 141 ========================================================*/ 142 void show_linklist(linklist_t *list) 143 { 144 linknode_t *node = NULL; 145 146 node = list->head->next; 147 148 while (NULL != node) { 149 printf("%d ", node->data); 150 node = node->next; 151 } 152 153 printf("\n"); 154 } 155 156 /*======================================================= 157 * 函數名稱:reverse_linklist 158 * 函數功能:反轉鏈表節點 159 * 函數參數:linklist_t *list 鏈表 160 * 返 回 值:void 161 * 創 建 人:by wangluojisuan,in 2013.11.27 162 * 修改記錄: 163 ========================================================*/ 164 void reverse_linklist(linklist_t *list) 165 { 166 linknode_t *current = NULL, 167 *pnext = NULL; 168 169 current = list->head->next; 170 while(NULL != current->next) { 171 pnext = current->next; 172 current->next = pnext->next; 173 pnext->next = list->head->next; 174 list->head->next = pnext; 175 } 176 }

感覺自己寫的比較容易懂了,有問題可以留言,或者QQ1262033368

轉載于:https://www.cnblogs.com/wangluojisuan/p/3445004.html

總結

以上是生活随笔為你收集整理的单链表逆序、反转的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。