力扣题目之K 个一组翻转链表
隔了几天(?)之后的新的一篇记录。工作太忙,当初还想着能一天至少写一篇,结果。唉!人真是懒惰的动物啊。
K 个一组翻转链表
给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。
k 是一个正整数,它的值小于或等于链表的长度。
如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。
示例:
给你这个链表:1->2->3->4->5
当 k = 2 时,应当返回: 2->1->4->3->5
当 k = 3 时,应当返回: 3->2->1->4->5
这个题目整体来说还是很简单的,只要了知道怎么翻转链表就可以去写,总的来说就是先通过一个循环知道链表的长度,然后把长度除以k计算出要循环的次数,最后每个循环翻转k个节点,最后余数就不翻转了。
public ListNode ReverseKGroup(ListNode head, int k) {
if(head=null||head.next==null) return head;
int count = 0;
ListNode cur = head;
ListNode dumyHead = new ListNode(0)
dumyHead.next = head;
while(cur!=null)
{
count++:
cur = cur.next;
}
int timsToFilp = count / k;
cur = head;
ListNode before = dumyHead;
ListNode after = null;
for(int i=0; i<timesToFlip; i++)
{
int nums = k;
ListNode temp = null;
ListNode pre = null;
while(nums!=0)
{
nums--;
temp = cur.next;
cur.next = pre;
pre = cur;
cur = temp;
after = cur;
}
before.next = pre;
while(pre!=null)
{
pre = pre.next;
}
pre.next = after;
before = pre;
cur = before.next;
}
return dumyHead.next;
}