单链表的操作

</pre><pre name="code" class="cpp">#include <iostream>
using namespace std;

struct ListNode
{
    int m_nvalue;
    ListNode* m_pNext;
};
void addToTail(ListNode* pHead,int value){
    ListNode *pNode = new ListNode();
    pNode -> m_nvalue = value;
    pNode -> m_pNext =NULL;
    
    if(pHead == NULL){
        pHead=pNode;
    }
    else{
        ListNode* pN=pHead;
        while(pN->m_pNext!=NULL){
            pN=pN -> m_pNext;
        }
        pN -> m_pNext = pNode;
    }
}
void removeNode(ListNode* pHead,int value){
    if(pHead==NULL){
        return;
    }
    ListNode* pToBeDeleted=NULL;
    if(pHead->m_nvalue==value){
        pToBeDeleted=pHead;
        pHead=pHead->m_pNext;
        
    }
    else{
        ListNode* pN=pHead;
        
        while(pN->m_pNext!=NULL&&pN->m_pNext->m_nvalue!=value){
            pN = pN -> m_pNext;
        }
        if(pN -> m_pNext !=NULL && pN -> m_pNext -> m_nvalue == value ){
            pToBeDeleted=pN -> m_pNext;
            pN -> m_pNext =pN -> m_pNext -> m_pNext;
        }
    }
    if(pToBeDeleted != NULL){
        delete pToBeDeleted;
        pToBeDeleted = NULL;
    }
}

void print(ListNode* pHead){
    if(pHead!=NULL){
        ListNode* pN=pHead;
        while(pN -> m_pNext != NULL){
            int n = pN -> m_nvalue;
            cout << n <<"-->";
            pN = pN -> m_pNext;
        }
        cout << pN -> m_nvalue;
        cout << endl;
    }
}
void destroyList(ListNode* pHead){
    if(pHead == NULL )
        return;
    ListNode* pN=pHead -> m_pNext;
    while(pN != NULL){
        delete pHead;
        pHead = pN;
        pN = pN ->m_pNext;
        //pToBeDeleted = NULL;
    }
    delete pHead;
    pHead = NULL;
    return;
}
void printReverse(ListNode* pHead){
    if(pHead != NULL){
        stack<ListNode*> nodes ;
        ListNode* pNode = pHead;
        while(pNode != NULL){
            nodes.push(pNode);
            pNode = pNode -> m_pNext;
        }
        while(!nodes.empty()){
            pNode = nodes.top();
            nodes.pop();
            cout << pNode ->m_nvalue << "-->";
        }
        cout << endl;
    }
}
int main() {
	cout  << "test\n";
	ListNode* pHead=new ListNode;
	pHead -> m_nvalue=1;
	pHead -> m_pNext=NULL;
	for(int i = 0; i<10;i++){
	    addToTail(pHead,i);
	}
	//cout << pHead -> m_nvalue;
	print(pHead);
	//destroyList(pHead);
	removeNode(pHead,6);
	print(pHead);
	printReverse(pHead);
	return 0;
}


test
1-->0-->1-->2-->3-->4-->5-->6-->7-->8-->9
1-->0-->1-->2-->3-->4-->5-->7-->8-->9
9-->8-->7-->5-->4-->3-->2-->1-->0-->1-->


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值