一、运行结果
二、题目
三、思路
翻转链表可以用头插法原地实现,在每一个长度为k的段中使用头插法,这里需要注意的是,如果最后一段的节点个数少于k个,是不进行反转的,所以在使用头插法进行翻转之前,需要先判断剩余节点数是否还够一组(k个)。
pre指针始终指向某个组的头结点,并以其为基准将p指针指向的后继结点插入到pre的后面。
四、代码
class Solution {
public:
ListNode* reverseKGroup(ListNode* head, int k) {
ListNode* dummy = new ListNode(-1); //新头结点
dummy->next = head;
ListNode* pre = dummy;
ListNode* p = head;
int len = 0;
while(p){
for(int j=0; jnext;
if(p == NULL) return dummy->next;
}
p = pre->next;
for(int i=1; p && p->next && inext; //头插法进行翻转
p->next = tmp->next;
tmp->next = pre->next;
pre->next = tmp;
}
pre = p; //pre向前移k个位置
p = p->next;
}
return dummy->next;
}
};
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)