链表总结
鏈表是一種動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)。每次添加一個(gè)節(jié)點(diǎn)時(shí)分配一次內(nèi)存。由于沒有閑置的內(nèi)存,鏈表的空間效率比數(shù)組要高。
常用的鏈表有:單向鏈表,雙向鏈表,循環(huán)鏈表
下面是一個(gè)單項(xiàng)鏈表添加節(jié)點(diǎn)和刪除節(jié)點(diǎn)的代碼
補(bǔ)一下new和delete的知識(shí)。
new和delete運(yùn)算符分別用于動(dòng)態(tài)分配內(nèi)存和動(dòng)態(tài)回收。用new動(dòng)態(tài)分配的內(nèi)存中存放隨機(jī)值,在使用前應(yīng)初始化。
在程序執(zhí)行過程中,如果希望根據(jù)輸入或計(jì)算的一個(gè)值來說明一個(gè)數(shù)組的大小,用傳統(tǒng)的數(shù)組說明語(yǔ)句是無法實(shí)現(xiàn)的,例如:
編譯器指出數(shù)組a說明無效,因?yàn)?strong>n不是常量。
但用new運(yùn)算符來申請(qǐng)分配內(nèi)存空間是可以的,例如:
相關(guān)面試題
單向鏈表反轉(zhuǎn)
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; }判斷鏈表中環(huán)的入口點(diǎn)
/* 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;}} };查找鏈表的倒數(shù)第k個(gè)數(shù)
判斷鏈表是否有環(huán)
總結(jié)
- 上一篇: C++十进制转二进制
- 下一篇: oracle中提取日期时间的特定部分,E