您的位置:首页 > 其它

1.删除一个无头单链表的非尾节点 2.从尾到头打印单链表

2017-07-26 08:26 369 查看
从尾到头打印单链表

1.将所有节点压如栈中,利用栈的先进后出原则来实现

2.也可以用递归来实现

struct ListNode
{
int _value;
ListNode* _pNext;
};

void ReversePrintfList(ListNode* pHead)
{
std::stack<ListNode*> sNode;
ListNode* pNode = pHead;
while(pNode)
{
sNode.push(pNode);
pNode=pNode->_pNext;
}
while(!sNode.empty())
{
pNode = sNode.top();
printf("%d ",pNode->_value);
sNode.pop();
}
printf("\n");
};

//递归实现
void ReversePrintfList(ListNode * pHead)
{
if(NULL != pHead)
{
if(NULL != pHead->_pNext)
ReversePrintfList(pHead->_pNext);
printf("%d ", pHead->_value);
}
}


删除一个无头单链表的非尾节点

因为是单链表无法知道删除节点的前一节点是什么,当然可以遍历一次,用指针堆前一节点标记,但是这个时间复杂度就高了,我们可以利用下图的方法来实现



这样就实现了无头单链表的非尾节点的删除

void DeleteNoHeadListNode(ListNode* pNode)
{
assert(pNode);
if(NULL == pNode->_pNext)
{
delete pNode;
pNode = NULL;
}
else
{
ListNode* pNodeNext = pNode->_pNext;
pNode->_value = pNodeNext->_value;
pNode->_pNext = pNodeNext->_pNext;
delete pNodeNext;
pNodeNext = NULL;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐