zoukankan      html  css  js  c++  java
  • 反转链表(欠反转地球的债)

    反转链表

    github链接

    题目在此

    解题思路

    当年没写的反转地球还是要补,跑不掉啊。

    输入部分:用结构体数组存。

    创建链表:先建立一个只有首个元素的链表,再一个一个插入节点。插入时用指针从数组头往后找。直到-1结束。

    反转链表:用四个指针p(依次往后移动),p1(需要反转的节点),p2(反转的节点将到达位置的后一个节点),p3(反转的节点将到达位置的前一个节点),这样k个节点反转时,开始p指向第一个,p1=p->Next;然后把p1取出(p->Next=p1->Next),然后用p3,p2确定p1将到达位置(p1->Next=p2,p3->Next=p1),注意第一次反转头指针在变,因为没有头节点,还有四个指针的移动。详情参看代码。

    输出部分:因为地址五位数,一开始用int存地址,输出补全。

    完善思路

    当然,打代码的道路总是不平坦的。

    跳过代码不成形环节。讲能反转之后的情况。

    一开始忽略了反转以后对应的地址也要跟着改变,这时候只要在每次改变链表顺序时,相应的next也改下就好了。例如:p->Next=p1->Next,这时候要跟上一句:p->next=p1->next。(大写Next为指针,小写next为下个地址)。

    跑去提交发现第五个测试点超时了,检查觉得创建链表很麻烦,每次都要把数组找一遍。在队长提示下用了数组下标。将下标用他们首地址表示,这样创建的时候,直接找下标为当前结点的next就好了。依旧-1停止。但是因为不是所有节点有效,所以用num记录。

    提交截图

    代码专区

    输入部分

    for (i = 0; i<n; i++)
    {
    	scanf("%d%d%d", &t1, &t2, &t3);
    	node[t1].address = t1;
    	node[t1].date = t2;
    	node[t1].next = t3;
    }
    

    创建链表函数

    Node *create(int first)//创建链表
    {
        Node*head, *p1, *p2;
        p1 = &node[first];
        head = p1;
        num++;
        while (p1->next != -1)
        {
            p2 = p1;
            p1 = &node[p1->next];
            p2->Next = p1;
            num++;
        }
        p1->Next = NULL;
        return head;
    }
    

    反转链表函数

      Node *reverse(Node *head, int k, int num)
      {
          Node *p;
          Node *p1, *p2, *p3;//p1需要反转的点,p2反转点插入位置后面一个点,p3反转点插入位置的前一个点
          int i;
    
          p = p1 = p3 = head;
          p2 = p;
    
          for (i = 0; i < num; i++)
          {
              int j = 1;
              while (j != k)
              {
                  p1 = p->Next;
                  p->Next = p1->Next;
                  p->next = p1->next;
    
                  if (i == 0)
                  {
                      head = p1;
                      p1->Next = p2;
                      p1->next = p2->address;
                      p2 = p1;
    
                  }
                  else
                  {
                      p3->Next = p1;
                      p3->next = p1->address;
                      p1->Next = p2;
                      p1->next = p2->address;
                      p2 = p1;
                  }
                  j++;
              }
              p3 = p;
              p = p->Next;
              p2 = p;
    
          }
          return head;
      }
    

    the last

    第一次写了卡死电脑的程序,还是蛮开心的。

  • 相关阅读:
    Power BI 根据用户权限动态生成导航跳转目标
    Power BI Tooltips 增强功能
    Power BI refresh error “could not load file or assembly…provided impersonation level is invalid”
    SQL 错误代码 18456
    如何使用SQL Server Integration Services从多个Excel文件读取数据
    通过表格编辑器将现有表引入Power BI数据流
    Power BI 中动态增长的柱状图
    ambari2.7.3离线安装hdp3.1.0时,ambari-hdp-1.repo中baseurl无值
    ambari 安装 cannot download file mysql-connector-java from http://8080/resource/mysql-connector-java.jar
    洛谷P4180 [BJWC2010]严格次小生成树
  • 原文地址:https://www.cnblogs.com/liu424/p/5518482.html
Copyright © 2011-2022 走看看