連結串列相關知識點
阿新 • • 發佈:2018-12-02
1.單項鍊表的節點定義:
struct ListNode
{
int m_nValue;
ListNode* m_pNext;
}
2.往連結串列的末尾新增一個節點:
void AddToTail(ListNode** pHead,int value) { ListNode* pNew=new ListNode(); pNew->m_nValue=value; pNew->m_pNext=nullptr; if(*pHead==nullptr) { *pHead=pNew; } else { ListNode* pNode=*pHead; while(pNode->n_pNext!=nullptr) pNode=pNode->m_pNext; pNode->m_pNext=pNew; } }
在上面的程式碼中,函式的第一個引數pHead 是一個指向指標的指標。當我們往一個空連結串列中插入一個節點是,新插入的節點就是連結串列的頭指標。由於此時會改動頭指標,因此必須把pHead 引數設為指向指標的指標,否則出了這個函式pHead 仍然是一個空指標。
3.在連結串列中找到第一個含有某值的節點並刪除該節點:
void RemoveNode(ListNode** pHead,int value) { if(pHead==nullptr || *pHead==nullptr) return; ListNode* pToBeDeleted=nullptr; if((*pHead)->m_nValue==value) { pToBeDeleted=*pHead; *pHead=(*pHead)->m_pNext; } else { ListNode *pNode=*pHead; while(pNode->m_pNext!=nullptr && pNode->m_pNext->m_nValue!=value) { pNode=pNode->m_pNext; } if(pNode->m_pNext!=nullptr && pNode->m_pNext->m_nValue==value) { pToBeDeleted=pNode->m_pNext; pNode->m_pNext=pNode->m_pNext->m_pNext; } } if(pToBeDeleted!=nullptr) { delete pToBeDeleted; pToBeDeleted=nullptr; } }