- 链表的节点定义
struct ListNode
{
int m_nValue;
ListNode* m_pNext;
};
- 给链表的末尾添加一个节点
void AddToTail(ListNode** pHead, int value){
ListNode* pNew = new ListNode();
pNew->m_nValue = value;
pNew->m_pNext = NULL;
if (*pHead == NULL){
*pHead = pNew;
}
else{
ListNode* pNode = *pHead;
while (pNode->m_pNext != NULL)
pNode = pNode->m_pNext;
pNode->m_pNext = pNew;
}
}
- 在链表中找到第一个含有某值的节点并且删除该节点
void RemoveNode(ListNode** pHead, int value)
{
if (pHead == NULL || *pHead == NULL)
return;
ListNode* pToBeDeleted = NULL;
if ((*pHead)->m_nValue == value)
{
pToBeDeleted = *pHead;
*pHead = (*pHead)->m_pNext;
}
else
{
ListNode* pNode = *pHead;
while (pNode->m_pNext != NULL && pNode->m_pNext->m_nValue != value)
pNode = pNode->m_pNext;
if (pNode->m_pNext != NULL && pNode->m_pNext->m_nValue == value)
{
pToBeDeleted = pNode->m_pNext;
pNode->m_pNext = pNode->m_pNext->m_pNext;
}
}
if (pToBeDeleted != NULL)
{
delete pToBeDeleted;
pToBeDeleted = NULL;
}
}
- 输入一个链表的头节点,从尾到头反过来打印出每个节点的值
1>用栈实现
void PrintListReversingly_Iteratively(ListNode* pHead){
stack<ListNode*>nodes;
ListNode* pNode = pHead;
while (pNode != NULL)
{
nodes.push(pNode);
pNode = pNode->m_pNext;
}
while (!nodes.empty())
{
pNode = nodes.top();
cout << pNode->m_nValue << ' ';
nodes.pop();
}
}
2>用递归实现
void PrintListReversingly_Iteratively(ListNode* pHead){
if (pHead != NULL){
if (pHead->m_pNext != NULL){
PrintListReversingly_Iteratively(pHead->m_pNext);
}
cout << pHead->m_nValue << ' ';
}
}