亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

單鏈表

2019-11-14 09:25:10
字體:
來源:轉載
供稿:網友

學習單鏈表已經有一段日子了,從大二到現在,也有不少年,最近準備實習生招聘,要開始復習并記錄一些重要知識。

一、鏈表逆置

鏈表逆置,一直是我記不住的一個內容,如果要逆置一個數組或者vector,最簡單暴力的方法是可以從后往前迭代一次將值插入到新的容器中。但是普通單鏈表并不具備隨機訪問和從后往前迭代的能力,這也就給逆置帶來了一定的麻煩,需要一些操作。

逆置鏈表有兩種情況: 1.整個單鏈表逆置。例如:1->2->3->4 ==>4->3->2->1 2.逆置單鏈表的部分。例如:1->2->3->4 ==>1->3->2->4

思路

需要一種能夠自己想到理解的方法,畢竟以前總是及記代碼,背算法;鄒博老師課中就提到了:頭插法

頭插法有一個特性:后插入的節點總是更靠近頭節點,優雅地完成了逆置,因此我們將原鏈表逆置的方法就是遍歷一遍并用頭插法重新插入一次。

(1)逆置整個鏈表

從頭開始遍歷,把鏈表中的每個節點頭插到新鏈表中。 假設我們的原鏈表是(0表示頭結點): 0->1->2->3->4->NULL 頭插法的基本過程是:

p->next=head->next;head->next=p;

根據頭插法的思路,還需要遍歷原鏈表,為此設置三個指針:PRe表待頭插節點的前一個節點,cur表示待頭插的節點,next表示待頭插的節點。

設置next指針的原因是因為在頭插過程中,cur->next=head->next,鏈表就斷掉了,使用next記錄一下以便下次迭代時更新cur指針。

按照上面的例子,如果要逆置整個鏈表,需要將鏈表的第2個節點到最后一個節點頭插到head節點之后。對于 0->1->2->3->4->NULL 來說,要從2開始將元素依次頭插到0之后。

ListNode* reverseList(ListNode* head){ if(head==NULL) return head; ListNode*newhead=new ListNode(0);//創建頭結點 newhead->next=head; ListNode*pre = newhead->next;//原鏈表第一個元素 ListNode*cur = pre->next;//原鏈表第二個元素 ListNode*next = NULL; while (cur != NULL) { next = cur->next;//記錄next元素 cur->next = newhead->next;//頭插 newhead->next = cur;//頭插//原cur節點被頭插到新鏈表,將斷開的鏈表連起來 pre->next = next; cur = next; } return newhead->next;}

(2)逆置部分鏈表

一樣的思路,假設我們要逆置 0->1->2->3->4->5->NULL 中的2->3->4 首先要找到head節點,這里是1。 再設置pre指針,這里是2 再設置cur指針,這里是3 然后將3->4頭插到1的位置。

ListNode* reverseBetween(ListNode* head, int start, int end) { ListNode *result=new ListNode(0);//頭結點 result->next=head; ListNode*pre=result; ListNode *cur=result->next; ListNode *post = NULL; int n = start; while (--n) { pre = pre->next;//找到起始位置 } ListNode*newHead = pre; pre = pre->next; cur = pre->next; n = end-start;//設置要逆置的元素個數 while (n--) { post = cur->next;//保存next cur->next = newHead->next;//頭插 newHead->next = cur;//頭插 pre->next = post;//將斷開的鏈表連起來 cur = post; } return result->next; }

二、刪除重復節點

刪除重復節點的前提是鏈表有序,也有兩種情況,一種是重復的節點只保留一個; 例如: 1->2->2->3 去重后變成: 1->2->3

一種是重復節點通通刪掉, 例如: 1->2->2->3 去重后變成: 1->3

思路

也就是遍歷一遍記錄重復元素,并刪除,由于是有序鏈表因此是比較容易的操作,雖然比不上stl的unique和erase簡單。

//stl去重 vector<int>nums = { 2, 2, 4, 3, 3, 1, 6,6,6,6}; sort(nums.begin(), nums.end()); auto end_unique = unique(nums.begin(), nums.end()); nums.erase(end_unique,nums.end());

(1)保留重復節點的一個

依然使用三個指針 pre:記錄待刪除節點的前一個節點。 cur:記錄待刪除節點。 next:記錄待刪除節點的后一個節點(方便遍歷)。

ListNode* deleteDuplicates(ListNode* head) { ListNode*newhead=new ListNode(0); newhead->next=head; ListNode*pre=newhead; ListNode*cur=newhead->next; ListNode*next=NULL; while(NULL!=cur) { next=cur->next;//記錄next while(NULL!=next&&(cur->val==next->val))//重復節點 { pre->next=next; delete cur; cur=next; next=cur->next; } pre=cur;//向后迭代 cur=next; } return newhead->next; }

(2)刪除重復節點

如果要將重復的節點通通刪掉,其實很簡單,按照上面的思路可以設置一個flag,發現有重復元素時將flag設置為true,當flag為true時,多做一次刪除操作,將剩余的那個節點刪掉。

ListNode* deleteDuplicates(ListNode* head) { ListNode*newhead=new ListNode(0); newhead->next=head; ListNode*pre=newhead; ListNode*cur=newhead->next; ListNode*next=NULL; bool flag=false; while(NULL!=cur) { next=cur->next; flag=false; while(NULL!=next&&(cur->val==next->val)) { pre->next=next; delete cur; cur=next; next=cur->next; flag=true; } if(flag)//有重復元素再刪除一次 { pre->next=next; delete cur; cur=next; } else { pre=cur; cur=next; } } return newhead->next; }
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91精品国产91久久久久| 一区二区三区亚洲| 久久精品国产欧美激情| 日韩网站免费观看| 国产精品稀缺呦系列在线| 日韩精品在线免费| 亚州精品天堂中文字幕| 日韩亚洲一区二区| 日韩精品中文字幕在线播放| 国语自产精品视频在线看抢先版图片| 久久久久亚洲精品成人网小说| 欧美黄色成人网| 国产97在线播放| 欧美激情精品久久久久久久变态| 日本精品一区二区三区在线播放视频| 一区二区欧美在线| 亚洲综合中文字幕68页| 久久精品欧美视频| 亚洲第一中文字幕在线观看| 亚洲成人黄色网址| 久久久久久久网站| 91地址最新发布| 亚洲一区二区福利| 两个人的视频www国产精品| 色综合伊人色综合网| 欧美激情久久久久| 国产成人久久久| www.日韩不卡电影av| 精品国产91久久久久久老师| 欧美wwwxxxx| 91成人精品网站| 91在线免费视频| 国产精品美女久久| 久久九九免费视频| 按摩亚洲人久久| 在线精品高清中文字幕| 色综合久久88色综合天天看泰| 91沈先生在线观看| 日韩在线免费观看视频| www.xxxx欧美| 欧美大片免费看| 秋霞av国产精品一区| 亚洲一区999| 色一情一乱一区二区| 国产91网红主播在线观看| 亚洲三级免费看| 欧美国产在线视频| 久久成人人人人精品欧| 中文字幕无线精品亚洲乱码一区| 欧美—级高清免费播放| 性欧美暴力猛交69hd| 国产91露脸中文字幕在线| 精品国产一区二区三区久久狼5月| 亚洲综合日韩在线| 45www国产精品网站| 日韩av最新在线| 69久久夜色精品国产69| 日韩av在线一区| 91久久嫩草影院一区二区| 日韩av成人在线观看| 亚洲电影免费观看高清| 欧美壮男野外gaytube| 狠狠躁夜夜躁人人躁婷婷91| 在线观看欧美日韩| 欧美视频免费在线| 久久综合久久八八| 久久夜色精品国产| 亚洲电影免费在线观看| 欧美大尺度电影在线观看| 国产欧美日韩免费看aⅴ视频| 国产69精品久久久久9999| 国产精品视频1区| 日韩欧美精品网站| 国产精品入口夜色视频大尺度| www.欧美视频| 亚洲欧美激情视频| 午夜剧场成人观在线视频免费观看| 国产欧美日韩精品专区| 日韩欧美在线第一页| 亚洲欧美国产高清va在线播| 欧美日韩国产在线播放| 97人人爽人人喊人人模波多| 国产成人a亚洲精品| 日韩在线免费高清视频| 北条麻妃一区二区在线观看| 欧美巨大黑人极品精男| 欧美日韩精品在线| 日韩大片免费观看视频播放| 国产精品爽黄69| 亚洲精品videossex少妇| 理论片在线不卡免费观看| 亚洲欧美激情在线视频| 一本大道久久加勒比香蕉| 国产精品欧美一区二区| 亚洲精品91美女久久久久久久| 国模精品一区二区三区色天香| 亚洲美女性视频| 欧美日韩亚洲视频| 欧美高清激情视频| 91社影院在线观看| 欧美日韩国产丝袜另类| 北条麻妃一区二区在线观看| 精品国产电影一区| 中文字幕亚洲二区| 久久免费视频观看| 欧美国产乱视频| 久久中文精品视频| 国产精品亚洲片夜色在线| 26uuu久久噜噜噜噜| 国产成人综合精品| 日韩欧美在线播放| 欧美精品电影免费在线观看| 69久久夜色精品国产69| 国产精品久久网| 久久久免费观看视频| 国产精品久久久久久av福利软件| 国内精品久久久久久| 亚洲精品永久免费精品| 亚洲高清福利视频| 午夜精品一区二区三区视频免费看| 国产亚洲aⅴaaaaaa毛片| 国产精品尤物福利片在线观看| 国产精品久久一区主播| 亚洲精品一区二区三区婷婷月| 久久大大胆人体| 成人免费福利在线| 疯狂做受xxxx高潮欧美日本| 欧洲精品在线视频| 久久精品国产69国产精品亚洲| 一本一本久久a久久精品牛牛影视| 少妇高潮久久77777| 日韩在线观看免费| 国产成人97精品免费看片| 国产精品自产拍在线观看| 久久九九亚洲综合| 久久九九国产精品怡红院| 国产精国产精品| 2021国产精品视频| 欧美精品www在线观看| 亚洲欧美日韩图片| 国产精品av免费在线观看| 国产主播欧美精品| 日韩av在线不卡| 欧美孕妇与黑人孕交| 精品中文字幕在线观看| 久久久久久高潮国产精品视| 国产亚洲欧美日韩精品| 色综合久久88色综合天天看泰| 精品一区二区三区四区| 亚洲一级免费视频| 国产成人一区二区三区小说| 97在线视频国产| 91中文字幕一区| 欧美一区二区三区精品电影| 欧美在线欧美在线| 亚洲精品欧美一区二区三区| 中文字幕视频在线免费欧美日韩综合在线看| 亚洲欧洲偷拍精品| 日本免费一区二区三区视频观看| 2019中文字幕免费视频| 91色p视频在线| 国产成人精品日本亚洲专区61| 国产成人av在线播放| 国产精品久在线观看|