2019-10-02 吴亲库里 库里的深夜食堂
给定一个链表,以k为一组,翻转链表,返回新的链表。如果当前链表节点数不足k的时候那就不必翻转了。
****
既然k决定了每次翻转的个数,以及最后不需要翻转的元素。我们可以先求出链表元素的个数。这个作为判断依据,每次翻转当前范围内的链表,记录最后的位置。
/**
* Definition for a singly-linked list.
* class ListNode {
* public $val = 0;
* public $next = null;
* function __construct($val) { $this->val = $val; }
* }
*/
class Solution {
/**
* @param ListNode $head
* @param Integer $k
* @return ListNode
*/
function reverseKGroup($head, $k) {
$dummy=new ListNode(-1);
$pre=$cur=$dummy;
$dummy->next=$head;
$num=0;
while($cur=$cur->next) ++$num;
while($num>=$k){
$cur=$pre->next;
for($i=1;$i<$k;++$i){
$t=$cur->next;
$cur->next=$t->next;
$t->next=$pre->next;
$pre->next=$t;
}
$pre=$cur;
$num -=$k;
}
return $dummy->next;
}
}