给定一个常数K和一个单链表L,要求按每K个节点反转单链表L。例如,给定L为1->2->3->4->5->6,如果K=3,应输出3->2->1->6->5->4,如果K=4,应输出4->3->2->1->5->6。 输入 每次输入一个案例,对于每一个案例: 第一行包含三个值:第一个节点的地址、节点总数N(<=10^5,正整数)、需要反转的子链表的长度K(<=N, 正整数)。 节点的地址是一个5位的非负整数,NULL用-1来代替。 下面接着输入N行,一行表示一个节点,格式为Address Data Next。其中Address为该节点的地址,Data为该节点的数据,Next为下一个节点的地址。 !!!注意:Address和Next字段都不是节点的真实存储地址,只是用来做示例,用于标识头节点和下一个节点是哪一个,真实的地址仍需要new出来后由计算机分配,不能直接向示例中的地址里写数据。 输出 对于每一个输入案例,输出反序后的单链表。其中每一个节点占一行,格式与输入一致。
时间: 2023-05-18 14:05:28 浏览: 105
思路:
1. 先将链表分成若干个长度为K的子链表;
2. 对于每个子链表,进行反转;
3. 将所有子链表连接起来。
具体实现:
1. 遍历整个链表,将链表分成若干个长度为K的子链表,存储在一个vector中;
2. 对于每个子链表,进行反转,可以使用双指针法;
3. 将所有子链表连接起来,注意连接时要考虑前后两个子链表的边界情况。
代码如下:
阅读全文