• 链表练习


    #include <memory>

    #include <iostream>
    #include <chrono>
    #include <thread>
    using namespace std;

    struct ListNode {
    int val;
    shared_ptr<ListNode> next;
    };

    bool InsertNode(shared_ptr<ListNode>& insertPos, int val)
    {
    shared_ptr<ListNode> node(new ListNode);
    if (!node)
    return false;
    node->val = val;
    node->next = NULL;
    insertPos->next = node;
    insertPos = node;

    return true;
    }

    shared_ptr<ListNode> InitLinkList()
    {
    shared_ptr<ListNode> head(new ListNode());
    head->val = 1;
    shared_ptr<ListNode> tail = head;

    InsertNode(tail, 2);
    InsertNode(tail, 2);
    InsertNode(tail, 2);
    InsertNode(tail, 3);
    InsertNode(tail, 4);
    InsertNode(tail, 4);
    InsertNode(tail, 5);

    return head;
    }

    void CoutLinkList(const shared_ptr<ListNode>& head)
    {
    for (shared_ptr<ListNode> node = head;
    node; node = node->next)
    {
    cout << node->val << " ";
    }
    cout << endl;
    }


    shared_ptr<ListNode> deleteDuplicates(shared_ptr<ListNode>& head)
    {
    if (!head)
    return NULL;
    shared_ptr<ListNode> dummy(new ListNode());
    dummy->val = 0;
    dummy->next = head;

    shared_ptr<ListNode> node = dummy;
    while(node->next != NULL && node->next->next!= NULL){
    if(node->next->val == node->next->next->val)
    {
    int val_prev = node->next->next->val;
    while (node->next != NULL && val_prev == node->next->val)
    {
    node->next = node->next->next;
    }
    }else{
    node = node->next;
    }

    }
    return dummy->next;
    }


    int main()
    {
    shared_ptr<ListNode> h = deleteDuplicates(InitLinkList());

    CoutLinkList(h);

    return 0;
    }

    #include <memory>
    #include <iostream>
    #include <chrono>
    #include <thread>
    using namespace std;

    struct ListNode {
    int val;
    shared_ptr<ListNode> next;
    };

    bool InsertNode(shared_ptr<ListNode>& insertPos, int val)
    {
    shared_ptr<ListNode> node(new ListNode);
    if (!node)
    return false;
    node->val = val;
    node->next = NULL;
    insertPos->next = node;
    insertPos = node;

    return true;
    }

    shared_ptr<ListNode> InitLinkList()
    {
    shared_ptr<ListNode> head(new ListNode());
    head->val = 1;
    shared_ptr<ListNode> tail = head;

    InsertNode(tail, 2);
    InsertNode(tail, 3);
    InsertNode(tail, 4);
    InsertNode(tail, 5);

    return head;
    }

    void CoutLinkList(const shared_ptr<ListNode>& head)
    {
    for (shared_ptr<ListNode> node = head;
    node; node = node->next)
    {
    cout << node->val << " ";
    }
    cout << endl;
    }

    shared_ptr<ListNode> ReverLinkList(shared_ptr<ListNode>& head)
    {
    shared_ptr<ListNode> prev = NULL;
    while(head != NULL)
    {
    shared_ptr<ListNode> curr = head;
    head = head->next;
    curr->next = prev;
    prev = curr;
    }

    return prev;
    }

    int main()
    {
    CoutLinkList(ReverLinkList(InitLinkList()));

    return 0;
    }

  • 相关阅读:
    (转) 解析 char *p和 char[]
    Linux下C程序内存、内存对齐问题 (实战)
    关于子网划分的两个例子
    子网掩码与子网划分 (转载)
    A、B、C类地址及子网掩码学习笔记
    本机ip、127.0.0.1和0.0.0.0区别(转载)
    初识const
    流媒体协议
    i2c-tools的使用方法
    linux ——内存共享映射mmap和munmap
  • 原文地址:https://www.cnblogs.com/itdef/p/6107395.html
Copyright © 2020-2023  润新知