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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

链表逆序的原理及实例

發布時間:2023/11/30 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 链表逆序的原理及实例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

http://blog.csdn.net/wangqing_12345/article/details/51757294

尾插法建立鏈表,帶頭結點 設鏈表節點為
typedef struct node {
??? int data;
??? struct node *next;
}node_t, *pnode_t;

要求將一帶鏈表頭List head的單向鏈表逆序。

分析:

? 1). 若鏈表為空或只有一個元素,則直接返回;

??2). 設置兩個前后相鄰的指針p,q. 將p所指向的節點作為q指向節點的后繼;

? 3). 重復2),直到q為空

? 4). 調整鏈表頭和鏈表尾

示例:以逆序A->B->C->D為例,圖示如下

  • #include?<stdio.h>
  • #include?<stdlib.h>
  • #include?<string.h>

  • #define?LEN?10

  • typedef struct node?{
  • ????int?data;
  • ????struct node?*pnext;
  • }?node_t,?*pnode_t;

  • pnode_t create_link()
  • {
  • ????int?i;
  • ????pnode_t phead;

  • ????phead?=?(pnode_t)malloc(sizeof(node_t));?????
  • ????if?(phead?==?NULL)?{
  • ????????printf("malloc fail.\n");
  • ????????exit(-1);
  • ????}
  • ????memset(phead,?0,?sizeof(node_t));

  • ????pnode_t ptail?=?phead;

  • ????for?(i?=?0;?i?<?LEN;?i++)?{
  • ????????pnode_t????pnew?=?(pnode_t)malloc(sizeof(node_t));
  • ????????if?(pnew?==?NULL)?{
  • ????????????printf("malloc fail.\n");
  • ????????????exit(-1);
  • ????????}
  • ????????memset(pnew,?0,?sizeof(node_t));

  • ????????pnew->data?=?i+1;
  • ????????pnew->pnext?=?NULL;
  • ????????ptail->pnext?=?pnew;
  • ????????ptail?=?pnew;
  • ????}

  • ????return phead;
  • }

  • void print_link(pnode_t phead)
  • {
  • ????pnode_t p?=?phead->pnext;

  • ????while?(p?!=?NULL)?{
  • ????????printf("%d ",?p->data);
  • ????????p?=?p->pnext;
  • ????}
  • ????printf("\n");
  • }

  • void reverse_link(pnode_t phead)
  • {
  • ????pnode_t p,?q,?ptmp;

  • ????p?=?phead->pnext;
  • ????q?=?phead->pnext->pnext;
  • ????ptmp?=?NULL;

  • ????while?(q?!=?NULL)?{
  • ????????ptmp?=?q->pnext;
  • ????????q->pnext?=?p;
  • ????????p?=?q;
  • ????????q?=?ptmp;
  • ????}

  • ????phead->pnext->pnext?=?NULL;
  • ????phead->pnext?=?p;
  • }

  • int?main(int?argc,?char?*argv[])
  • {
  • ????pnode_t phead?=?NULL;

  • ????phead?=?create_link();

  • ????print_link(phead);

  • ????reverse_link(phead);
  • ????print_link(phead);

  • ????return 0;
  • }

  • 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

    總結

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

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