• 单链表


    #include <iostream>
    using namespace std;
    typedef struct listnode
    {
        int data;
        struct listnode *next;
    }LIST_NODE;
    typedef struct list
    {
        LIST_NODE* head;
    }LIST;
    LIST* create_list()
    {
        LIST* list = new (LIST);
        list->head = NULL;
        return list;
    }
    LIST_NODE* create_node(int data)
    {
        LIST_NODE* node = new (LIST_NODE);
        node->data = data;
        node->next = NULL;
    }
    void list_append(LIST* list, int data)  //类似于 链式存储栈一样
    {
        LIST_NODE* node = create_node(data);
        if(NULL==list->head)
        {
            list->head = node;
        }
        else
        {
            node->next = list->head;
            list->head = node;
        }
    }
    void list_end_append(LIST* list, int data)
    {
        LIST_NODE* node =NULL;
        for(node=list->head; node; node=node->next)
        {
            if(NULL==node->next)
            {
                break;
            }
        }
        if(node)
        {
            node->next = create_node(data);
        }
        else
        {
            list->head = create_node(data);
        }
    }
    void print(LIST* list)
    {
        LIST_NODE* node = NULL;
        for(node = list->head;node;node =node->next)
        {
            cout<< node->data <<" ";
        }
        cout<<endl;
    }
    bool list_insert(LIST* list,int after, int now) //now->after
    {
        LIST_NODE* node = NULL;
        for(node=list->head;node;node=node->next)
        {
            if(now == node->data)
            {
                break;
            }
        }
        if(node)
        {
            LIST_NODE*node_new = create_node(after);
            node_new->next =node->next;
            node->next = node_new;
            return true;
        }
        return false;
    }
    void list_del(LIST* list,int data)
    {
        LIST_NODE* front =NULL;
        LIST_NODE* node =list->head;
        while(node)
        {
            if(data == node->data)
            {
                if(node ==list->head)
                {
                    list->head = node->next;
                    delete(node);
                    node =NULL;
                    node = list->head;//值为data的node全部删除
                }
                else
                {
                    front->next =node->next;
                    delete(node);
                    node =NULL;
                    node = front->next; //值为data的node全部删除
                }
            }
            else
            {
                front =node;
                node=node->next;
            }
        }
    }
    LIST_NODE* destroy_node(LIST_NODE* node)
    {
        LIST_NODE* next = node->next;
        delete(node);
        return next;
    }
    void destroy_list(LIST* list)
    {
        while(list->head)
        {
            list->head = destroy_node(list->head);
        }
        delete(list);
    }
    void list_reverse(LIST* list)
    {
        LIST_NODE* temp = NULL;
        LIST_NODE* new_head = NULL;
        LIST_NODE* node = list->head;
        while(node)
        {
            temp = node;
            node = node->next;
            temp->next =new_head;
            new_head = temp;
        }
        list->head = new_head;
    }
    LIST_NODE* middle_node(LIST* list)
    {
        LIST_NODE* slow = list->head;
        LIST_NODE* fast = list->head;
        while(fast->next && fast->next->next)
        {
            fast = fast->next->next;
            slow = slow->next;
        }
        return slow;
    }
    bool isCircle(LIST* list)
    {
         NODE* slow = list->head;
         NODE* fast = list->head;
        while(fast && fast->next)
        {
              slow = slow->next;
               fast = fast->next->next;
              if(slow == fast)
              {
                 break;
              }
        }
      return ! (fast == NULL || fast -> next == NULL);
    }
    int main()
    {
        LIST* list = create_list();
        for(int i=10; i<=50;i+=10)
        {
            list_append(list,1);
        }
        cout<<"print the list:"<<endl;
        print(list);
        list_insert(list,5,10);
        cout<<" insert 5 after 10:"<<endl;
        print(list);
        list_del(list,30);
        cout<<" after delete 30:"<<endl;
        print(list);
        list_del(list,50);
        cout<<" after delete 50:"<<endl;
        print(list);
        list_end_append(list,3);
        list_end_append(list,4);
        list_end_append(list,5);
        cout<<" list end append:"<<endl;
        print(list);
        list_reverse(list);
        cout<<" reverse the list:"<<endl;
        print(list);
        cout<<" middle node of  the  list:"<<endl;
        cout<<middle_node(list)->data <<endl;
        destroy_list(list);
        return 0;
    }

    关注公众号 海量干货等你
  • 相关阅读:
    Java之事件处理
    Java之图形程序设计
    小议设置path环境变量
    关于JAVA中的编译和解释执行
    并发工具类 CountDownLatch
    线程池
    Properties的小问题
    转换流
    TCP中客户端和服务器的理解
    leetcode_160. 相交链表
  • 原文地址:https://www.cnblogs.com/sowhat1412/p/12734508.html
Copyright © 2020-2023  润新知