题解 | #链表中的节点每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; }
方法同反转某段链表,分段执行。
#刷题攻略#