每日一题笔记–10月20日 143重排链表
力扣每日一题笔记–10月20日 143重排链表
143题 重排链表
题目
给定一个单链表 L:L0→L1→…→Ln-1→Ln , 将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→…
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例 1:
给定链表 1->2->3->4, 重新排列为 1->4->2->3. 示例 2:
给定链表 1->2->3->4->5, 重新排列为 1->5->2->4->3.
自己思考
相当于把队尾的数依次插入,要分奇偶情况。遍历时,相当于两个指针,一个在首部++,一个在尾部–,然后分奇偶情况,决定遍历条件。 但是想不通如何取到尾部的索引,因为链表不能取索引,如果每次取尾部,每次都要遍历一遍,复杂度很高。
看完题解的思考
看了官方题解的第一个方法:线性表,首先,采用线性表的形式。所谓线性表,就是把链表遍历存进数组里,这样数组的下标就是索引,数组的值就是链表。 其次,遍历条件可以不用分奇偶,直接判断两个索引是否相等就可以了。
根据题解文字部分,自己写的代码。
出现了溢出错误。我觉得可能是i,j溢出的事
对比题解调试
首先 i一定小于j 其次 ,i先++ ,再判断 i是否=j,这样就包含了奇偶的情况 i=j跳出循环. 最后别忘了i一定要连接到空指针,链表才完整。