博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
反转单链表的方法
阅读量:7083 次
发布时间:2019-06-28

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

方法1: 将单链表储存为数组,然后按照数组的索引逆序进行反转。 比较浪费空间 时间复杂度:O(N) 空间复杂度:O(N)

方法2: 使用3个指针遍历单链表,逐个链接点进行反转。 时间复杂度:O(N) 空间复杂度:O(1)

ActList* ReverseList2(ActList* head)  {      //ActList* temp=new ActList;   if(NULL==head|| NULL==head->next) return head;    //少于两个节点没有反转的必要。      ActList* p;      ActList* q;      ActList* r;      p = head;        q = head->next;      head->next = NULL; //旧的头指针是新的尾指针,next需要指向NULL      while(q){          r = q->next; //先保留下一个step要处理的指针          q->next = p; //然后p q交替工作进行反向          p = q;           q = r;       }      head=p; // 最后q必然指向NULL,所以返回了p作为新的头指针      return head;      }  复制代码

方法3: 从第2个节点到第N个节点,依次逐节点插入到第1个节点(head节点)之后,最后将第一个节点挪到新表的表尾。 时间复杂度:O(N) 空间复杂度:O(1)

//while循环版void reverse(node* head)  {      if ( (head == 0) || (head->next == 0) ) return;// 边界检测      node* pNext = 0;      node* pPrev = head;// 保存链表头节点      node* pCur = head->next;// 获取当前节点      while (pCur != 0)      {          pNext = pCur->next;// 将下一个节点保存下来          pCur->next = pPrev;// 将当前节点的下一节点置为前节点          pPrev = pCur;// 将当前节点保存为前一节点          pCur = pNext;// 将当前节点置为下一节点      }      head->next = NULL;      head = pPrev;  } 复制代码
//递归版node* reverse( node* pNode, node*& head)  {      if ( (pNode == 0) || (pNode->next == 0) ) // 递归跳出条件      {          head = pNode; // 将链表切断,否则会形成回环          return pNode;      }        node* temp = reserve(pNode->next, head);// 递归      temp->next = pNode;// 将下一节点置为当前节点,既前置节点      return pNode;// 返回当前节点  }  复制代码

转载地址:http://ekmml.baihongyu.com/

你可能感兴趣的文章
数组去重(new Set)
查看>>
requirejs的config及optimizer r.js配置
查看>>
一个电脑 两个显示屏
查看>>
win7如何共享文件 图文教你设置win7文件共享
查看>>
ubuntu安装mysql
查看>>
递归程序的非递归实现
查看>>
结合字符串常量池/String.intern()/String Table来谈一下你对java中String的理解
查看>>
Git使用笔记
查看>>
均值不等式使用变化
查看>>
tf.train.batch的偶尔乱序问题
查看>>
(转)深入理解最强桌面地图控件GMAP.NET --- 初用
查看>>
洛谷P4459/loj#2511 [BJOI2018]双人猜数游戏(博弈论)
查看>>
html5杂谈1
查看>>
阿里云 azkaban 发邮件的坑
查看>>
socket协议和http协议性能对比
查看>>
看《东陵大盗》有感
查看>>
解释:C++虚函数
查看>>
C++ #define,typedef,using用法区别
查看>>
IDEA软件安装详解,
查看>>
three.js-002
查看>>