日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

链表总结

發布時間:2025/3/15 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 链表总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

鏈表是一種動態數據結構。每次添加一個節點時分配一次內存。由于沒有閑置的內存,鏈表的空間效率比數組要高。
常用的鏈表有:單向鏈表,雙向鏈表,循環鏈表
下面是一個單項鏈表添加節點和刪除節點的代碼

/*一個單向鏈表的節點定義如下*/ struct ListNode {int nValue;//數據域ListNode* pNext;//指針域 }; /*向鏈表末尾添加一個節點的C++代碼如下*/ void AddToTail(ListNode** pHead, int value){//第一個參數pHead是一個指向指針的指針,即*pHead指向頭結點ListNode* pNew = new ListNode();//定義一個新的節點。這句話可以理解為,動態分配一個ListNode型的節點,并使pNew指向該節點。pNew->nValue = value;pNew->pNext = nullptr;if(*pHead == nullptr)//如果是空鏈表,直接將頭指針指向新建立的節點*pHead = pNew;else{ListNode* pNode = *pHead; while(pNode->pNext != nullptr)pNode = pNode->pNext;pNode->pNext = pNew;} } /*在鏈表中找到第一個含有某值的節點并刪除該節點*/ void RemoveNode(ListNode** pHead, int value){if(pHead == nullptr || *pHead == nullptr)//首先判斷鏈表是否為空return;ListNode* pToBeDeleted = nullptr; //定義一個pToBeDeleted指針,用來指向待刪除的節點if((*pHead)->value == value){//如果頭結點即是待刪除節點,則要將頭指針指向下一個節點pToBeDeleted = *pHead;*pHead = (*pHead)->pNext;}else{ListNode* pNode = *pHead;while(pNode->pNext != nullptr && pNode->pNext->nValue != value)pNode = pNode->pNext;if(pNode->pNext != nullptr && pNode->pNext->nValue == value){pToBeDeleted = pNode->pNext;pNode->pNext = pToBeDeleted->pNext;}}if(pToBeDeleted != nullptr){//此時pToBeDeleted指向了待刪除的節點,用delete來釋放節點delete pToBeDeleted;pToBeDeleted->pNext = nullptr;} }

補一下new和delete的知識。
new和delete運算符分別用于動態分配內存和動態回收。用new動態分配的內存中存放隨機值,在使用前應初始化。
在程序執行過程中,如果希望根據輸入或計算的一個值來說明一個數組的大小,用傳統的數組說明語句是無法實現的,例如:

int n; cin>>n; float a[n];

編譯器指出數組a說明無效,因為n不是常量
但用new運算符來申請分配內存空間是可以的,例如:

int n; cin>>n; float *p = new folat[n];//申請n個動態空間 p[0] = 1.1; ... delete []p;//回收動態空間

相關面試題

單向鏈表反轉

LinkList* reverse(LinkList* head){LinkList* p, q, pr;p=head->next;pr=p->next;q = NULL;while(p!= NULL){p->next = q;q=p;p = pr;pr = p->next;}head -> next = q;return head; }

判斷鏈表中環的入口點

/* struct ListNode {int val;struct ListNode *next;ListNode(int x) :val(x), next(NULL) {} }; */ class Solution { public:ListNode* EntryNodeOfLoop(ListNode* pHead){if(pHead == NULL || pHead->next == NULL){return null;}ListNode* fast = pHead;ListNode* slow = pHead;while(fast != slow && fast->next != NULL && fast != NULL){slow = slow->next;fast = fast->next->next;}if(fast == slow){fast = pHead;while(fast != slow){fast = fast->next;slow = slow->next;}if(fast == slow){return fast;}}else{return null;}} };

查找鏈表的倒數第k個數
判斷鏈表是否有環

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

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

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