zoukankan      html  css  js  c++  java
  • 反转链表

    题目

    定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。

    思路

    定义三个指针,指向当前节点的指针(pnode),指向当前节点的下一结点的指针(pnext),指向当前节点的前一节点的指针(pre,第一次初始化为空)

    1. 首先记录当前节点的下一结点,以为这里是更改链表中的指针,使pnode->next指向pre。所以不保存下一结点会丢失链表的信息
    2. 更改当前节点中next指针域,使其指向pre
    3. 使pre指向pnode(当前节点),pnode向后移动一个位置(pnode指向pnext)
    struct List
    {
        int val;
        struct List* next;
        List(int v):val(v),next(nullptr){}
    };
    List* reverse(List* head)
    {
        List* cur=head;
        List* pre=nullptr;
        while(cur)
        {
            List* next=cur->next;
            if(next==nullptr)
                head=cur;
    
            cur->next=pre;
            pre=cur;
            cur=next;
        }
        return head;
    }

    链表每k组翻转

        List newHead(-1);
        newHead.next=head;
        List* pre=&newHead;
        List* end=&newHead;
    
        while(end)
        {
            List* start=nullptr;
            for(int i=0;i<3&&end;++i)
                end=end->next;
            if(end==nullptr)
            {
                start=pre->next;
                pre->next=reverse(start);
                break;
            }
            start=pre->next;
            List* next=end->next;
            end->next=nullptr;
            pre->next=reverse(start);
    
            start->next=next;
            pre=start;
            end=pre;
       }
  • 相关阅读:
    一次蜿蜒曲折的RFID破解之路
    无线安全渗透测试套件WiFi-Pumpkin新版本发布
    交易系统 1代
    angular-ui分页组件
    付款
    [译]AngularJS Services 获取后端数据
    [译]AngularJS中DOM操作
    [译]AngularJS $apply, $digest, 和$evalAsync的比较
    Angular $watch
    AngularJS中的表单验证
  • 原文地址:https://www.cnblogs.com/tianzeng/p/10179345.html
Copyright © 2011-2022 走看看