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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

单链表的应用 就地逆置

發布時間:2023/12/20 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 单链表的应用 就地逆置 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【問題描述】試實現線性表的就地逆置算法,即在原表的存儲空間將線性表(a1,a2,a3....an)逆置為(an...a3,a2,a1).

? ?[分析]就地逆置就是不需要額外申請結點空間,只需要利用原來的表中的結點空間。若對順序表中的元素進行逆置,可 ? 以借助“交換”前后相應元素的方法實現,但是對于單鏈表就不能“交換”,時間復雜度就會達到O(n^2)。

? 【思想】逆置后的單鏈表初始化為空表,表中的結點不是新生成的,而是從原鏈表中依次“刪除”,再逐個以頭插法放置到逆置表中,如此循環,直至原鏈表為空表止。

#include <stdio.h> #include <stdlib.h> #define ElemType char typedef struct Node /*結點類型定義*/ { ElemType data;struct Node * next; }Node, *LinkList; /* LinkList為結構指針類型*/LinkList CreateFromTail() /*通過鍵盤輸入表中元素值,利用尾插法建單鏈表,并返回該單鏈表頭指針L*/ { LinkList L;Node *r, *s;char c;int flag =1; /*設置一個標志,初值為1,當輸入"$"時,flag為0,建表結束*/L=(Node * )malloc(sizeof(Node)); L->next=NULL; /*為頭結點分配存儲空間,建立空的單鏈表L*/r=L; /*r指針動態指向鏈表的當前表尾,以便于做尾插入,其初值指向頭結點*/while(flag) /*循環輸入表中元素值,將建立新結點s插入表尾*/{c=getchar();if(c!='$'){s=(Node*)malloc(sizeof(Node));s->data=c;r->next=s;r=s;}else{flag=0;r->next=NULL; /*將最后一個結點的next鏈域置為空,表示鏈表的結束*/}} return L; } void ReverseList(LinkList L) { Node *p,*q;p=L->next;L->next=NULL;while(p!=NULL){ q=p->next; /*q指針保留p->next得值*/p->next=L->next;L->next=p; /*將p結點頭插入到單鏈表L中*/p=q; /*p指向下一個要插入的結點*/} }int main() {LinkList l;Node *p;printf("用尾插法建立單鏈表,請輸入鏈表數據,以$結束!\n");l = CreateFromTail();printf("輸入的單鏈表為:\n");p = l->next;while(p!=NULL){printf("%c\n",p->data);p=p->next;}ReverseList(l);printf("逆置后的單鏈表為:\n");p = l->next;while(p!=NULL){printf("%c ",p->data);p=p->next;}printf("\n");return 0; }

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

總結

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

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