《剑指offer》链表的结点的插入删除

来源:互联网 发布:网络风靡的性感骚彤彤 编辑:程序博客网 时间:2024/06/05 08:06
#include <iostream>#include <stack>using namespace std;struct ListNode{    int value;    struct ListNode* next;};void addToTail(ListNode** pHead,int value){    if(pHead == NULL) return;    ListNode* pNew = new ListNode;//建立结点    pNew->value = value;    pNew->next = NULL;    if(*pHead == NULL)    {        *pHead = pNew;    }    else    {        ListNode* p = *pHead;        while(p->next != NULL)        {            p = p->next;        }        p->next = pNew;    }}void removeNode(ListNode**pHead, int value){    if(pHead == NULL || *pHead == NULL) return;   //pHead 不合法或者链表为空    ListNode* pToBeDelete = NULL;    if((*pHead)->value == value)    {        pToBeDelete = *pHead;        *pHead = NULL;    }    else    {        ListNode* pNode = *pHead;     //pNode指向结点value的前驱  或者最后一个结点        while(pNode->next != NULL && pNode->next->value != value)        {            pNode = pNode->next;        }        if(pNode->next != NULL)          //value是链表中的结点        {            pToBeDelete = pNode->next;            pNode->next = pToBeDelete->next;        }    }    if(pToBeDelete != NULL)    {        delete pToBeDelete;        pToBeDelete = NULL;    }}void printNodeReversingly(ListNode* pHead){    stack<ListNode*> nodes;    ListNode* pNode = pHead;    while(pNode != NULL)    {        nodes.push(pNode);        pNode = pNode->next;    }    while(!nodes.empty())    {        pNode = nodes.top();        nodes.pop();        cout<<pNode->value<<'\t';    }    cout<<endl;}int main(){    ListNode* head = NULL;    addToTail(&head, 1);    addToTail(&head, 2);    addToTail(&head, 3);    addToTail(&head, 4);    printNodeReversingly(head);    removeNode(&head,4);    removeNode(&head,3);    printNodeReversingly(head);    printNodeReversingly(NULL);    return 0;}

0 0