题解 | #链表中的节点每k个一组翻转#
链表中的节点每k个一组翻转
https://www.nowcoder.com/practice/b49c3dc907814e9bbfa8437c251b028e
<?php
/*class ListNode{
var $val;
var $next = NULL;
function __construct($x){
$this->val = $x;
}
}*/
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param head ListNode类
* @param k int整型
* @return ListNode类
*/
function reverseKGroup( $head , $k )
{
// write code here
if($head == null || $head->next == null){
return $head;
}
$pre = null;
$beg = $head;
$end = $head;
$c = 1;
$ret = $head; // 最终要返回的头部指针
while($end != null && $c < $k){
$end = $end->next;
$c++;
if($c == $k && $end != null){
printf("group: ".$c."\n");
// 退到了组的结束节点,并且本组数量为k个,可以开始区间内翻转
$reverseStart = $beg;
$reversePre = $pre;
for($i=0;$i < $k;$i++){
$temp = $beg->next;
$beg->next = $pre;
$pre = $beg;
$beg = $temp;
}
// 翻转完,判断最初的是null还是连接了其他key
if($reversePre != null){
$reversePre->next = $pre;
}else{
// 记录头部指针
$ret = $pre;
}
$reverseStart->next = $beg;
$end = $beg;
$pre = $reverseStart;
$c=1;
}
}
return $ret;
}
方法同反转某段链表,分段执行。
#刷题攻略#