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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

链表笔试题汇编(一)

發(fā)布時間:2023/12/4 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 链表笔试题汇编(一) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題目:給定單向鏈表的頭指針和一個結(jié)點指針,定義一個函數(shù)在O(1)時間刪除該結(jié)點。

分析:刪除結(jié)點可以從鏈表的頭結(jié)點開始順序遍歷,發(fā)現(xiàn)某個結(jié)點的next指向要刪除的結(jié)點時,將該結(jié)點的next指向要刪除的下一個結(jié)點。但是基于這種思路,得到的時間復(fù)雜度是O(n)。

刪除結(jié)點只是讓這個結(jié)點不出現(xiàn)在該鏈表中,可以采取覆蓋的方式。也就是將下一個結(jié)點的內(nèi)容復(fù)制到需要刪除的結(jié)點上覆蓋掉原有的內(nèi)容。這樣的話,就可以達(dá)到要求了。

NOTE:若要刪除的結(jié)點為尾節(jié)點,我們?nèi)砸獜念^遍歷該鏈表。

? ? 若只有一個結(jié)點時,則不僅要刪除該結(jié)點,還要將其置為NULL。

參考代碼:

#include<stdio.h> #include<assert.h> #include<stdlib.h>typedef?int?datatype;typedef?struct?LinkList {datatype?data;struct?LinkList?*next;}LinkList,*pLinkList,*pList;void?InitLinkList(pList*?pHead) {assert(pHead);*pHead=NULL; }void?PrintList(pList?list) {pLinkList?cur=list;printf("list?is:");while(cur){printf("%d?",cur->data);cur=cur->next;}printf("over\n"); }pLinkList?BuyNode(datatype?x) {pLinkList?newNode=(pLinkList)malloc(sizeof(LinkList));newNode->data=x;newNode->next=NULL;return?newNode; }void?PushBack(pList*?pHead,?datatype?x) {pLinkList??cur=*pHead;pLinkList?newNode=BuyNode(x);if(cur==NULL){*pHead=newNode;return;}else{while(cur->next){cur=cur->next;}cur->next=newNode;} }pLinkList?Find(pList?phead,?datatype?x) {pLinkList?cur=phead;if(cur==NULL){return?NULL;}else{while(cur){if(cur->data==x){return?cur;}else{cur=cur->next;}}} }void?DeleteNode(LinkList?**pHead,LinkList?*pDelete) {if(!pHead?||?!pDelete) {return;}//非尾節(jié)點if(pDelete->next!=NULL){LinkList?*pNext=pDelete->next;pDelete->data=pNext->data;pDelete->next=pNext->next;free(pNext);pNext=NULL;}//一個節(jié)點else?if(*pHead==pDelete){free(pDelete);pDelete=NULL;*pHead=NULL;}//尾節(jié)點else{LinkList?*pNode=*pHead;while(pNode->next!=NULL){pNode=pNode->next;}pNode->next=NULL;free(pNode);pDelete=NULL;} }void?Test() {pList?mylist;InitLinkList(&mylist);PushBack(&mylist,1);PushBack(&mylist,2);PushBack(&mylist,3);PushBack(&mylist,4);PrintList(mylist);DeleteNode(&mylist,?Find(mylist,2));PrintList(mylist); }int?main() {Test();system("pause");return?0; }


轉(zhuǎn)載于:https://blog.51cto.com/luminous/1743347

總結(jié)

以上是生活随笔為你收集整理的链表笔试题汇编(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。