連結串列,複雜度為O(1) 如果是直接插入的話,是無法做到的,因為不知道p節點的前序指標,
但是可以通過:現將s節點插入到p節點的後面,然後再交換p節點與s節點的資料的方式來實現"插入"
即: s->next = p->next;
p->next = s;
s->data <--> p->data L->next = L->prior = L
帶有頭結點的雙向迴圈連結串列L為空標的條件是: L的next 和 prior都為L
q = p->next;free(q); py->next = px -> next;
px->next = py; L -> next -> next = L && L->next != L
L -> next != L,是為了防止出現只有一個頭結點的情況
O(1)
在值為x的節點之後插入節點,需要找到值為x的節點,時間複雜度為O(n),然後插入節點,時間複雜度為O(1)
單連結串列,雙連結串列
根據指標的連線方式,將連結串列分為:動態連結串列,靜態連結串列 f->next = p->next;
f->prior = p;
p->next->prior = f;
p->next = f; 指標 節點在物理儲存上的相鄰關係 4(待插入節點的兩個指標也計算在內) , 2(待插入節點的一個指標也計算在內) 從任意節點出發,都能訪問到連結串列的全部元素 L->next->next == L && L->prior->prior == L && L ->next != L p->next != null
L->next == L && L->prior == L 將連結串列listb連線在lista的尾部, for迴圈的作用是將p指向lista的最後一個節點 BEI
FHDA 視訊講解連線:https://www.bilibili.com/video/av843754?from=search&seid=16128174079900509637
連結串列的反轉:
p->next->next == L 相鄰元素相比較,逆序交換,演算法結束時,最大元素調整到連結串列的末尾
12 7 10 5 9 15 重點在於: 不是將h節點當做迴圈指標,而是將h->next節點當做迴圈的指標
h->next節點,p節點,q節點,三個指標實現了反轉,最後同樣形成了一個帶有頭結點的連結串列 q指標的作用就是始終指向pa節點的前序節點,僅僅是為了在遇到常數的時候,刪除pa節點用的,因為這個時候,需要呼叫free(pa),就需要知道前序節點,而對於正常的情況(求導之前不為0),是不需要pa的
題中說了頭結點,就一定有頭結點,而且頭指標一定指向頭結點,頭結點是沒有資料的,本題為迴圈連結串列,有頭結點,所以第一個資料從頭結點的下一個節點開始,且while迴圈的終止條件為,當pa != 頭結點