Leetcode-025-Reverse Nodes in k-Group

反转链表的题目就是注意细节了,不要不小心对空指针进行操作,注意链表各个结点的操作顺序。在纸上画一遍直接模拟就行了。这题我用递归完成的,为了不每次都计算一遍链表长度以判断是否需要反转,我另写了一个函数,把当前链表长度作为参数输入,以避免递归过程中的重复计算。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* reverse(ListNode* head, int len, int k)
    {
        if(lennext:NULL,*post=(now)?now->next:NULL;
        now->next=pre;
        for(int i=0;inext:NULL;
            now->next=pre;
        }
        head->next=reverse(post,len-k,k);
        head=now;
        return head;
    }
    ListNode* reverseKGroup(ListNode* head, int k) {
        if(k==1||!head)
            return head;
        ListNode *temp=head;
        int len=0;
        while(temp)
        {
            temp=temp->next;
            len++;
        }
        return reverse(head,len,k);
    }
};

你可能感兴趣的:(Leetcode-025-Reverse Nodes in k-Group)