链接
题意
给定一个单链表:$L_0 → L_1 → ... → L_{n-1} → L_n$
,
将它重新排序为:$L_0 → L_n → L_1 → L_{n-1} → L_2 → L_{n-2} → ...$
要求
- 不能修改节点值域,只能修改节点的指向
举例
1→2→3→4
重新排序为1→4→2→3
1→2→3→4→5
重新排序为1→5→2→4→3
分析
从题意即举例可以看出,大概完成了以下几步操作:
- 把原链表从中间分成两部分
- 把第2部分链表逆序
- 合并两个链表为一个
实现
这个题目综合了链表的好几个操作:链表逆序、链表拆分、链表合并、链表遍历。
考虑到节点数目未知,所以不应该考虑使用栈等消耗空间的方式。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
|