1. 程式人生 > >C++:連結串列的簡單插入和刪除

C++:連結串列的簡單插入和刪除

#include <iostream>
using namespace std;


struct ListNode {
  int value;
  ListNode* next;
};

void addToDetail(ListNode** pHead, int value) {
  ListNode* pNew = new ListNode();
  pNew->value = value;
  pNew->next = NULL;

  if (*pHead == NULL) {
    *pHead = pNew;
  } else {
    ListNode*
pNode = *pHead; while (pNode->next != NULL) { pNode = pNode->next; } pNode->next = pNew; } } void removeNode(ListNode** pHead, int value) { if(pHead == NULL || *pHead == NULL) { return; } ListNode* pToDeleted = NULL; if ((*pHead)->value == value) { pToDeleted =
*pHead; *pHead = (*pHead)->next; } else { ListNode* pNode = *pHead; while(pNode->next != NULL && pNode->next->value != value) pNode = pNode->next; if (pNode->next != NULL && pNode->next->value == value) { pToDeleted = pNode->
next; pNode->next = pNode->next->next; } } if (pToDeleted != NULL) { delete pToDeleted; pToDeleted = NULL; } } void visitList(ListNode** pHead) { if (pHead == NULL || *pHead == NULL) { return; } ListNode* tmp = *pHead; while(tmp != NULL) { cout << tmp->value << endl; tmp = tmp->next; } } int main(int argc, char const *argv[]) { ListNode** pHead = NULL; // *pHead = head; ListNode* head = NULL; pHead = &head; addToDetail(pHead, 1); addToDetail(pHead, 2); addToDetail(pHead, 3); addToDetail(pHead, 4); visitList(pHead); removeNode(pHead, 4); removeNode(pHead, 1); removeNode(pHead,2); visitList(pHead); return 0; }

需要注意的地方:

  • 當頭節點是NULL的時候,插入的第一個節點就是頭節點,因此使用指標的指標指向頭節點指標。