pat链表

本文分析了PAT甲级考试中的四道链表题目,包括共享节点查找、链表排序、链表反转和链表去重。重点讨论了链表遍历、节点插入排序及反转等操作,并总结了链表问题的常见题型,如链表排序和反转,强调了灵活改变指针关系的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

链表

1032. Sharing (25)-PAT甲级真题
1052. Linked List Sorting (25)-PAT甲级真题
1074. Reversing Linked List (25)-PAT甲级真题
1097. Deduplication on a Linked List (25)-PAT甲级真题

分析

pat上链表相关题,一共4道。链表一般考察两点:
1, 遍历
2, 改变指针关系,如插入或者删除操作。

难度: p1052 > p1074 > p1097 > p1032

p1032

	题目大意: 求两张链表首个公共节点的地址,如果没有就输出-1。
	
	分析: 在LNode结构体中定义一个访问位flag。初始赋值false。
	遍历链表1, 将链表1上每个结点flag位设为true。遍历链表L2,如果遇到
	节点flag是true,当前节点就是公共首节点,跳出循环。
	如果链表2上全为false。那么不存在公共首节点,
	
	本题主要考察链表遍历。

p1052

题目大意: 给出一个链表,将链表排序,然后把链表上的结点按照data值的从小到
大顺序输出。

分析:	这里晴神上的思路更加简单快捷,但是不推荐,推荐改变指针关系。
采用类似插入排序的思想。设当前处理节点为p, 在[head, p)子链表中找到第一个
大于p的节点q,以及q的前驱pre。将p节点插入到pre和q之间。处理下一个节点。
本题主要考察链表的排序。

不错的题

p1074

题目大意:将链表上每K个节点为一组反转,不足的保持不变。

分析: 柳神博客上有一个更加巧妙的思路。
我这里主要是采用双指针, head和end分别表示要反转的子链表的头指针,和最后
一个节点的下一个位置。将子链表反转即可。每处理完一个子链表,就更新head为
下一个等待处理的子链表的头节点。
本题考查链表反转。

不错的题

p1097

题目大意:	给一个链表,去重(去掉值或者绝对值相等的),先输出删除后的链表,
再输出删除了的链表。

分析: 定义一个times数组,一个删除链表dL 遍历一次链表即可, 将出现2次以上的
结点删除,采用尾插法插到dL尾部。原链表剩余部分就是不重复的。
遍历输出两张链表即可。

小结

pat上链表题一共四道。链表遍历是最简单的。一般这种题比较简单。较难一点的是
那种需要改变指针关系的。如1052和1074. 应当熟练掌握第二种题型。灵活改变指针
关系。 常见的题型有:
	1, 链表排序
	2, 链表反转
	3, 两张有序表的合并
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值