码迷,mamicode.com
首页 > 其他好文 > 详细

{链表操作}

时间:2015-04-19 16:09:31      阅读:102      评论:0      收藏:0      [点我收藏+]

标签:

From 剑指Offer 何海涛 著

#include <iostream>

struct ListNode {
    int m_nValue;
    ListNode *m_pNext;
};

void AddToTail(ListNode **head, int value) {
    if(head != NULL) {
        ListNode **curr = head;
        while(*curr != NULL) {
            curr = &(*curr)->m_pNext; // 注意: 这里是要移动指针, 而非改变这个指针指向的数据!
        }
        *curr = new ListNode;         // 注意: 这里是要改变这个指针指向的数据, 而非移动指针!
        (*curr)->m_nValue = value;
        (*curr)->m_pNext = NULL;
    }
}

void RemoveNode(ListNode **head, int value) {
    if(head != NULL && *head != NULL) {
        ListNode **curr = head;
        while(*curr != NULL && (*curr)->m_nValue != value) {
            curr = &(*curr)->m_pNext; // 注意: 这里是要移动指针, 而非改变这个指针指向的数据! 
        }
        if(*curr != NULL) {
            ListNode *toBeDeleted = *curr;
            *curr = (*curr)->m_pNext; // 注意: 这里是要改变这个指针指向的数据, 而非移动指针!
            delete toBeDeleted;
        }
    }
}

测试集:

void PrintList(const ListNode *head) {
    const ListNode *curr = head;
    while(curr != NULL) {
        std::cout << curr->m_nValue << " -> ";
        curr = curr->m_pNext;
    }
    std::cout << "NULL" << std::endl;
}

int main(int argc, char *argv[]) {
    ListNode *head = NULL;
    AddToTail(&head, 1);
    AddToTail(&head, 2);
    AddToTail(&head, 3);
    AddToTail(&head, 4);
    AddToTail(&head, 5);
    PrintList(head);
    
    RemoveNode(&head, 1);
    PrintList(head);
    RemoveNode(&head, 1);
    PrintList(head);
    RemoveNode(&head, 3);
    PrintList(head);
    RemoveNode(&head, 5);
    PrintList(head);
    RemoveNode(&head, 2);
    PrintList(head);
    RemoveNode(&head, 4);
    PrintList(head);
    
    return 0;
}

 

{链表操作}

标签:

原文地址:http://www.cnblogs.com/long3216/p/4439181.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!