题目:有一个线性表(a1,a2,a3,...,an),采用带头节点的单链表L存储,设计一个算法将其就地逆置,线性表变为(an,...a3,a2,a1)。所谓“就地”指辅助存储空间为O(1)。

解题思路:
如果是顺序存储的话,我们很容易想到解题思路,利用1个辅助变量让第1个元素与第n个元素交换,然后再利用这个辅助变量让第2个元素与第n-1个元素交换,...最后利用这个辅助变量让第n/2个元素与第n+1-n/2个元素交换。

如果不要求“就地”的话,可以创建一个n个元素辅助数组,一次访问单链表中的每个元素,并存储到该数组中,然后再依次访问单链表中的每一个元素,同时从该数组的末尾开始为单链表中的元素赋值,直到数组第1个元素的值赋值给单链表最后一个元素。

如果单链表为空或单链表中只有头结点,那么单链表不需要逆置,如果单链表中只有一个元素,逆置之后它的位置还是不会改变,所以可以不逆置。当单链表中有2个或两个以上的元素时,从第1个元素断开,令它的next为空,依次访问第2个元素到第n个元素,当访问到其中的任意一个元素时,将它插入到头结点之后,也就是把它插入到第1个位置,这样原始的第1个元素就会被后面的n-1个元素插入到它的前面,原始的第2个元素就会被后面的n-2个元素插入到它的前面,...直到原始的第n个元素插入到第1个位置。这样就实现了带头结点的单链表的就地逆置。

ADT定义:

//单链表的结点类
class LNode{//为了简化访问单链表,结点中的数据项的访问权限都设为publicpublic int data;public LNode next;
}

算法实现:

public class LinkListUtli{public static void reverse(LNode L){//单链表为空或只有头结点或只有一个元素,不用进行逆置操作if(L==null||L.next==null||L.next.next==null)return;LNode p=L.next.next;//令p指向线性表中第2个元素a2 L.next.next=null;//令线性表中第1个元素a1的next为空while(p!=null){LNode q=p.next;//将p插入头结点之后p.next=L.next;L.next=p;p=q;//继续访问下一个元素}}
}

单链表就地逆置(Java版)相关推荐

  1. java实现单链表就地逆置,单链表的就地逆置讲解

    { List *q; List *p = L->next; L -> next = NULL; //单链表就地逆置 while (p != NULL) { q = p -> next ...

  2. java实现单链表就地逆置,20. 微软面试题:单链表就地逆放

    题目是:链表操作,单链表就地逆置 分析: 这题只需要设置三个指针就搞定了,ListNode* p 表示当前指针, ListNode* fp: 上一个节点指针, ListNode * ep :下一个节点 ...

  3. 【AU】单链表就地逆置

    单链表就地逆置 单链表的就地逆置是指辅助空间O(1)的逆置方法,有两种方法: 第一种 普通循环(头插法重新建立带头节点的新链表) 将头结点摘下,然后从第一结点开始,依次前插入到头结点的后面(头插法), ...

  4. 带头结点单链表就地逆置算法

    1.带头结点单链表就地逆置算法 部分函数调用参考如下:https://blog.csdn.net/qq_50504109/article/details/120288749 /*** 单向链表的逆置, ...

  5. 6-1 带头结点的单链表就地逆置 (10 分)

    6-1 带头结点的单链表就地逆置 (10 分) 本题要求编写函数实现带头结点的单链线性表的就地逆置操作函数.L是一个带头结点的单链表,函数ListReverse_L(LinkList &L)要 ...

  6. 链表就地逆置Java_单链表就地逆置(Java版)

    题目:有一个线性表(a1,a2,a3,...,an),采用带头节点的单链表L存储,设计一个算法将其就地逆置,线性表变为(an,...a3,a2,a1).所谓"就地"指辅助存储空间为 ...

  7. python实现带头结点的单链表的就地逆置_6-1 带头结点的单链表就地逆置 (10 分)...

    本题要求编写函数实现带头结点的单链线性表的就地逆置操作函数.L是一个带头结点的单链表,函数ListReverse_L(LinkList &L)要求在不新开辟节点的前提下将单链表中的元素进行逆置 ...

  8. python实现带头结点的单链表的就地逆置_带头结点的单链表就地逆置

    本题要求编写函数实现带头结点的单链线性表的就地逆置操作函数.L是一个带头结点的单链表,函数ListReverse_L(LinkList &L)要求在不新开辟节点的前提下将单链表中的元素进行逆置 ...

  9. 带头结点的单链表就地逆置

    本题要求编写函数实现带头结点的单链线性表的就地逆置操作函数.L是一个带头结点的单链表,函数ListReverse_L(LinkList &L)要求在不新开辟节点的前提下将单链表中的元素进行逆置 ...

最新文章

  1. VMware记录(一)- vCenter Server 服务安装提示无法解析此完全限定域名
  2. [导入]ASP.NET中上传并读取Excel文件数据
  3. Fragment与Activity交互(使用接口)
  4. 【树莓派搭建个人网站】花生壳内网穿透
  5. Bugku-Web-Cookies欺骗
  6. Oracle + PlSql 下载安装配置
  7. 红帽linux认证的有效期,红帽RHCE证书过期怎么办
  8. 9月20日科技资讯|余承东硬刚 iPhone11;苹果推送正式版 iOS 13;php-nsq 3.4.3 线上稳定版发布
  9. java分解因式_Java将一个整数因式分解
  10. 九爷带你了解 nginx 的反向代理
  11. do.....while(0)让你虎躯一震的用法
  12. JVM(3)-垃圾收集机制
  13. 更简单的方法实现el-calendar日历组件中点击上个月、今天、下个月按钮时的点击事件
  14. ESP32S3系列--FLASH及PSRAM配置
  15. html中自定义右键菜单功能,HTML中自定义右键菜单功能
  16. CS5801HDMI转eDP/DP转换芯片资料|CS5801规格书
  17. 隧道二衬钢筋(一键生成)
  18. 升级pip出现拒绝访问
  19. 数学模型课程期末复习提纲(上)
  20. php scada,监控系统SCADA软件—KingSCADA

热门文章

  1. HarmonyOS实战—实现相亲APP
  2. WIN32 opengl环境搭建
  3. 如何解决光纤熔接过程中遇到这六大问题?
  4. 计算机文字转表格,Word怎么把文字转换成表格 30秒搞定
  5. Windows 11 已修复 AMD CPU 性能问题
  6. 如何绘画Q版古风人物,超简单超实用,一学就会!
  7. 【升级版】python全自动定时,循环发消息(微信、QQ),零基础应用,
  8. Shell小技巧(一百零五)脚本中的空格小结
  9. #NAME?_#NAME?
  10. 定制联想笔记本一键恢复内容