单链表就地逆置(Java版)
题目:有一个线性表(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版)相关推荐
- java实现单链表就地逆置,单链表的就地逆置讲解
{ List *q; List *p = L->next; L -> next = NULL; //单链表就地逆置 while (p != NULL) { q = p -> next ...
- java实现单链表就地逆置,20. 微软面试题:单链表就地逆放
题目是:链表操作,单链表就地逆置 分析: 这题只需要设置三个指针就搞定了,ListNode* p 表示当前指针, ListNode* fp: 上一个节点指针, ListNode * ep :下一个节点 ...
- 【AU】单链表就地逆置
单链表就地逆置 单链表的就地逆置是指辅助空间O(1)的逆置方法,有两种方法: 第一种 普通循环(头插法重新建立带头节点的新链表) 将头结点摘下,然后从第一结点开始,依次前插入到头结点的后面(头插法), ...
- 带头结点单链表就地逆置算法
1.带头结点单链表就地逆置算法 部分函数调用参考如下:https://blog.csdn.net/qq_50504109/article/details/120288749 /*** 单向链表的逆置, ...
- 6-1 带头结点的单链表就地逆置 (10 分)
6-1 带头结点的单链表就地逆置 (10 分) 本题要求编写函数实现带头结点的单链线性表的就地逆置操作函数.L是一个带头结点的单链表,函数ListReverse_L(LinkList &L)要 ...
- 链表就地逆置Java_单链表就地逆置(Java版)
题目:有一个线性表(a1,a2,a3,...,an),采用带头节点的单链表L存储,设计一个算法将其就地逆置,线性表变为(an,...a3,a2,a1).所谓"就地"指辅助存储空间为 ...
- python实现带头结点的单链表的就地逆置_6-1 带头结点的单链表就地逆置 (10 分)...
本题要求编写函数实现带头结点的单链线性表的就地逆置操作函数.L是一个带头结点的单链表,函数ListReverse_L(LinkList &L)要求在不新开辟节点的前提下将单链表中的元素进行逆置 ...
- python实现带头结点的单链表的就地逆置_带头结点的单链表就地逆置
本题要求编写函数实现带头结点的单链线性表的就地逆置操作函数.L是一个带头结点的单链表,函数ListReverse_L(LinkList &L)要求在不新开辟节点的前提下将单链表中的元素进行逆置 ...
- 带头结点的单链表就地逆置
本题要求编写函数实现带头结点的单链线性表的就地逆置操作函数.L是一个带头结点的单链表,函数ListReverse_L(LinkList &L)要求在不新开辟节点的前提下将单链表中的元素进行逆置 ...
最新文章
- VMware记录(一)- vCenter Server 服务安装提示无法解析此完全限定域名
- [导入]ASP.NET中上传并读取Excel文件数据
- Fragment与Activity交互(使用接口)
- 【树莓派搭建个人网站】花生壳内网穿透
- Bugku-Web-Cookies欺骗
- Oracle + PlSql 下载安装配置
- 红帽linux认证的有效期,红帽RHCE证书过期怎么办
- 9月20日科技资讯|余承东硬刚 iPhone11;苹果推送正式版 iOS 13;php-nsq 3.4.3 线上稳定版发布
- java分解因式_Java将一个整数因式分解
- 九爷带你了解 nginx 的反向代理
- do.....while(0)让你虎躯一震的用法
- JVM(3)-垃圾收集机制
- 更简单的方法实现el-calendar日历组件中点击上个月、今天、下个月按钮时的点击事件
- ESP32S3系列--FLASH及PSRAM配置
- html中自定义右键菜单功能,HTML中自定义右键菜单功能
- CS5801HDMI转eDP/DP转换芯片资料|CS5801规格书
- 隧道二衬钢筋(一键生成)
- 升级pip出现拒绝访问
- 数学模型课程期末复习提纲(上)
- php scada,监控系统SCADA软件—KingSCADA