c语言链表有没有哨兵的区别,链表中的哨兵(sentinel)
哨兵節點廣泛應用于樹和鏈表中,如偽頭、偽尾、標記等,它們是純功能的,通常不保存任何數據,其主要目的是使鏈表標準化,如使鏈表永不為空、永不無頭、簡化插入和刪除。
問題:刪除鏈表中等于給定值val的所有節點。
1,如果節點在中間,只需將該節點進行刪除即可。
2,如果節點在頭部,則問題將有點復雜,不能直接將頭節點刪掉,這樣會造成鏈表的丟失。通過設置哨兵節點,用來臨時保存頭部節點,最后在計算完畢以后,返回該節點。
代碼如下:/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* removeElements(struct ListNode* head, int val){
if (head == NULL)
return NULL;
struct ListNode *ret = (struct ListNode*)malloc(sizeof(struct ListNode));
ret->next = head;
struct ListNode *pre = ret;
struct ListNode *cur = head;
while (cur != NULL)
{
if (cur->val == val)
{
pre->next = cur->next;
cur = cur->next;
}
else
{
cur = cur->next;
pre = pre->next;
}
}
return ret->next;
}
使用兩個指針,一個表示前一個節點,一個表示當前節點。
當當前節點需要刪除時,
pre->next = cur->next;
哨兵節點用來保存頭結點的前一個節點,返回是,返回->next即可。
malloc申請的內存由調用者釋放。
總結
以上是生活随笔為你收集整理的c语言链表有没有哨兵的区别,链表中的哨兵(sentinel)的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 紫檀木多少钱啊?
- 下一篇: 地下城与勇士赛莉亚的祝福怎么得到
