链表笔试题汇编(一)
生活随笔
收集整理的這篇文章主要介紹了
链表笔试题汇编(一)
小編覺得挺不錯的,現(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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c++11新特性(4) lambda捕
- 下一篇: java基础巩固笔记(6)-注解