連結串列節點的增加和刪除
阿新 • • 發佈:2018-12-09
連結串列是一種動態的資料結構,因為在建立連結串列時,不需要知道連結串列的長度,只需要對指標進行操作。
1. 連結串列的定義
struct ListNode{
int val;
ListNode* next;
ListNode(int x) : val(x), next(NULL){}
};
2. 在連結串列的末尾增加一個節點
解決思路:分原來的連結串列是空連結串列和非空連結串列的情況;
特別注意:函式的第一個引數head是一個指向指標的指標,當向一個空連結串列中插入一個節點時,新插入的節點就是連結串列的頭指標,由於此時會改動頭指標,因此必須把head引數設為指標的指標,否則出了這個函式head仍然是一個空指標 。
//新增一個節點到連結串列的末尾
void AddtoListNodeTail(ListNode** head, int value){
ListNode* newNode = new ListNode(value);
if (*head == NULL){
*head = newNode;
}
else{
ListNode* pNode = *head;
while (pNode->next != NULL)
pNode = pNode->next;
pNode->next = newNode;
}
}
3. 在連結串列中找到第一個含有指定值的結點並刪除該結點
解決思路:分兩種情況:
1)要刪除的值就在頭結點中
2)要刪除的值不在頭結點中
//找到第一個含有某個值的節點並刪除該節點 void RemoveFirstValue(ListNode **head, int value){ if (head == NULL || *head == NULL) return; ListNode* RemoveNode = NULL; //要刪除的是頭節點 if ((*head)->val == value){ RemoveNode = *head; *head = (*head)->next; } //要刪除的不是頭節點 else{ ListNode *node = *head; while (node->next != NULL && node->next->val != value){ node = node->next; } if (node->next != NULL && node->next->val == value){ RemoveNode = node->next; node->next = node->next->next; } } if (RemoveNode != NULL){ delete RemoveNode; RemoveNode = NULL; } }