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

来源:互联网 发布:淘宝怎么营销 编辑:程序博客网 时间:2024/05/29 12:22

从尾到头打印单链表
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;    }}
阅读全文
0 0
原创粉丝点击