【鏈表】刪除一個無頭單鏈表的非尾節點 以及從尾到頭打印單鏈表


刪除一個無頭單鏈表的非尾節點

分析:最直觀的思路,刪除一個節點,需要知道該節點的前一個節點,然后將該節點的前一個節點指向該節點的下一個節點。
思路:可將刪除的節點的下一個節點 覆蓋掉當前要刪除的點,然后原刪除的節點指向下一個節點的下一個節點。

//確保posNode不是尾節點
void DelNotTailNode(Node *posNode)
{
if (posNode)
{
Node* pNext = posNode->_next;
posNode->_value = pNext->_value;
posNode->_next = pNext->_next;
free(pNext);
pNext = NULL;
}
}

從尾到頭打印單鏈表

方法1、
借助棧的后進先出的特性,將從頭到尾遍歷的節點保留,然后輸出棧。

void PrintListReverse(Node* pHead)
{
std::stack<Node *> s;
Node* pNode = pHead;
while (pNode)
{
s.push(pNode);
pNode = pNode->_next;
}
//輸出棧
while (!s.empty())
{
cout << s.top()->_value << " ";
s.pop();
}
cout << endl;
}

方法2
方法1借助棧,遞歸的本質就是棧,所以可以用遞歸實現,每次訪問到一個節點的時候想,先遞歸輸出它的后面的節點,再輸出該節點自身。

void PrintListReverse2(Node* pHead)
{
if (pHead != NULL)
{
PrintListReverse2(pHead->_next);
cout << pHead->_value << " ";
}

}

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com