博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
反转链表(欠反转地球的债)
阅读量:5999 次
发布时间:2019-06-20

本文共 1882 字,大约阅读时间需要 6 分钟。

反转链表

题目在此

885733-20160522235757091-931288075.png

解题思路

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

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

创建链表:先建立一个只有首个元素的链表,再一个一个插入节点。插入时用指针从数组头往后找。直到-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记录。

提交截图

885733-20160522235715935-781273597.png

代码专区

输入部分

for (i = 0; i

创建链表函数

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

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

转载于:https://www.cnblogs.com/liu424/p/5518482.html

你可能感兴趣的文章
Web Server
查看>>
修梦秘法
查看>>
表字段顺序不一致可impdp?
查看>>
mysql配置开机启动
查看>>
html内联(行内)元素、块级(块状)元素和行内块元素分类
查看>>
结构—C#基础回顾
查看>>
CSS3线性渐变/径向渐变
查看>>
JavaScript书写规范
查看>>
解除openstack中instance对IP的限制
查看>>
Linux通过sed批量替换字符串
查看>>
php 正则修饰符
查看>>
【腾讯Bugly干货分享】从0到1打造直播 App
查看>>
【译】【nodeschool】【scope-chains-closures】作用域
查看>>
解决Cisco ××× Client Reason 442: Failed to Enable Virtual Adapter
查看>>
360不再是以前的360了
查看>>
Cisco各种设备SNMP协议的典型配置
查看>>
iText 实现页眉 页脚 页码
查看>>
网规:第2章 计算机网络规划与设计-2.3网络需求分析
查看>>
Ehcache 整合Spring 使用页面、对象缓存
查看>>
PS1变量配置
查看>>