刪除單鏈表中第i個節點

2021-07-11 17:41:35 字數 1106 閱讀 7667

單鏈表的刪除操作是將單鏈表的第i個節點刪去。具體步驟如下:

(1)找到節點ai-1的儲存位置p,因為在單鏈表中節點ai的儲存位址是在其直接前趨節點ai-1的指標域next中;

(2)令p->next指向ai的直接後繼節點ai+1;

(3)釋放節點ai的空間;

#include 

#include

typedef struct node

node;

// 尾插法建立單鏈表(帶頭節點)

node *createend(int arr, int len)

end->next = null; // 單鏈表建立完畢,將終端節點的指標域置空

return head;

}// 刪除單鏈表中第i個節點

node *delete(node *head, int i)

if (p->next == null || j > i)

node *temp = p->next;

p->next = temp->next;

free(p);

return head;

}// 注: (1)設單鏈表的長度為n,則單鏈表刪除第i個節點時,必須保證 1

<= i <= n,否則不合法;

// (2)當 i=n+1 時,雖然被刪除節點不存在,但其前趨節點卻存在,它是終端節點;所以,被刪節點的直接前趨*p存在,並不意味著被刪節點就一定存在,僅當*p存在(即p != null)且*p不是終端節點(即p->next != null)同時滿足 j <= i時,才能確定被刪節點存在。此時,演算法的時間複雜度是o(n)。

// 單鏈表列印

void print(node *head)

}int main(void)

; int len = sizeof(arr)/sizeof(int);

node *head = createend(arr, len);

// 刪除前

print(head);

delete(head, 5);

// 刪除後

print(head);

return

0;}

單鏈表的刪除第i個元素

刪除操作圖示 a2的節點q,要實現q的刪除,就是讓他的前繼節點p繞過a2直接指向後繼節點a3。p next p next next 單鏈表第i個資料刪除結點的演算法思路 1.宣告結點p指向鍊錶第乙個結點,初始化j 1 2.當jnext賦值給q 4.單鏈表的刪除標準語句p next q next,將q...

刪除單鏈表倒數第K個節點

有p1,p2兩個指標,p1從頭開始跑,先跑k個節點,然後p2開始跑,當p1跑到頭時,p2指向的就是倒數第k個節點了。這道題的思路比較簡單,要想做得更好,可以加入一些魯棒性的考慮,比如說空鍊錶情況,鍊錶長度小於k等。下面是 include struct node class solution if k...

刪除單鏈表倒數第n個節點

如何刪除單鏈表中的倒數第n個節點?先遍歷一遍單鏈表,計算出單鏈表的長度,然後,從單鏈表頭部刪除指定的節點。description 刪除單鏈表倒數第n個節點,常規解法.param head param n return listnode public static listnode removenth...