【LeetCode 25] Kフリップ・リストのグループ

トピックリンク

[説明]


アナログ十分。
Kは、Kフリップ上のノード。
各ノードは、その前にノードに次のフィールドポイントを考え
ますが、この段落内の最後のノードの前に次のドメイン、そのノードのノードを修正し終えた後。
その後の期間は、次の間隔の開始を修正左端のことを次のノードのドメインを置きます。

[コード]

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* reverseKGroup(ListNode* head, int k) {
        ListNode *thead = new ListNode(0);
        thead->next = head;
        ListNode *temp = thead;
        int len = 0;
        while (temp->next!=NULL){
            temp = temp->next;
            len++;
        }
        temp = thead;
        for (int i = 1;i <= len/k;i++){
            ListNode *pre = temp;
            ListNode *p = temp,*tp = temp->next;//tp保存修改到的节点的next,因为next会变了
            for (int j = 1;j <= k;j++){
                p = tp;
                tp = p->next;
                p->next = pre;//把当前节点的next域指向前面一个节点
                pre = p;//保存pre节点。
            }
            temp->next->next=tp;//要修改的这段的最左边的节点next域改一下
            ListNode *t2 = temp->next;
            temp->next = pre;//这段要修改的区间的最左边的左边一个节点的next域指向这一段的最右边那个节点
            temp = t2;//指向这一段"新的最右边的节点"(也即原来的第一个节点)
        }
        return thead->next;
    }
};

おすすめ

転載: www.cnblogs.com/AWCXV/p/11827243.html