题解 | #牛群的重新分组#

牛群的重新分组

https://www.nowcoder.com/practice/267c0deb9a6a41e4bdeb1b2addc64c93

/**
 * struct ListNode {
 *  int val;
 *  struct ListNode *next;
 *  ListNode(int x) : val(x), next(nullptr) {}
 * };
 */
class Solution {
  public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param head ListNode类
     * @param k int整型
     * @return ListNode类
     */
  /*
  核心思想是 每k个元素看作是一个子链表,做该子链表的逆序,一共做 len/k次
  逆序的做法是 在头节点后面不断插入新遍历的节点
  */
    ListNode* reverseKGroup(ListNode* head, int k) {
        // write code here
        ListNode* p = head;
        int cnt = 0;
        struct ListNode* h = (struct ListNode*)malloc(sizeof(struct ListNode*));
        int len = 0;  //链表长度
        ListNode* q = head;
        while(q){
            len++, q= q->next;
        }
	  	// 记录每次 链表倒置时的最后一个位置
        ListNode* last = nullptr;
	  // 记录每次 链表倒置
        ListNode* lastn = nullptr;
        int times = 0;
        int m = len / k;
        while (p) {
            printf("p=%d\n", p->val);
            ListNode* n = p->next;
            if (times == 0) {
                if (cnt == 0) {
                    last = p;
                    p->next = nullptr;
                } else {
                    p->next = h->next;
                }
                h->next = p;
                cnt++;
                if (cnt == k) {
                    cnt = 0;
                    times ++;
                }
            }else{
                if (cnt == 0) {
                    lastn = p;
                    p->next = nullptr;
                } else {
                    p->next = last->next;
                }
                last->next = p;
                cnt++;
                if (cnt == k){
                    cnt = 0, times++;
                    last = lastn;
                }
            }
            p = n;
            if(times==m){
                last->next = p;
                break;
            }
        }
        return h->next;


    }
};

全部评论

相关推荐

点赞 评论 收藏
分享
头像
11-21 11:39
四川大学 Java
是红鸢啊:忘了还没结束,还有字节的5k 违约金
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务