LeetCode 25. Reverse Nodes in k-Group

给一个链表,每k个反转一下,最后不够的不反转。
写了半天,实在是太弱了。

 struct XNode{
    ListNode *t1, *t2;
    int flag;
 };

class Solution {
public:
    XNode dfs( ListNode* pre, ListNode* nows, int cnt, int k ){
        //if( nows == NULL )
        if( cnt >= k ){
            if( nows->next != NULL ){
                XNode temp = dfs( NULL, nows->next, 1, k );
                XNode temp1;
                temp1.t1 = nows;
                temp1.t2 = temp.t1;
                temp1.flag = 0;
                if(pre != NULL )nows->next = pre;
                return temp1;
            }else{
                XNode temp1;
                temp1.t1 = nows;
                temp1.t2 = NULL;
                temp1.flag = 0;
                if(pre != NULL )nows->next = pre;
                return temp1;
            }
        }
        if( nows->next == NULL ){
            XNode temp;
            temp.flag = 1;
            if( pre == NULL ){
                temp.t1 = nows;
            }
            return temp;
        }
        XNode temp = dfs( nows, nows->next, cnt + 1, k );
        //if( temp == NULL )  return NULL;
        if( temp.flag ){
            if( pre == NULL ){
                XNode temp;
                temp.t1 = nows;
                return temp;
            }
        }else{
            if( pre == NULL ){
                nows->next = temp.t2;
            }else{
                nows->next = pre;
            }
        }
        return temp;
    }

    ListNode* reverseKGroup(ListNode* head, int k) {
        if( head == NULL )  return NULL;
        ListNode *temp = head, *ans;
        int cnt = 1;
        while( cnt < k && temp->next != NULL ){
            cnt++;
            temp = temp->next;
        }
        if( cnt < k ){
            ans = head;
            return ans;
        }else{
            ans = temp;
        }
        dfs( NULL, head, 1, k );
        return ans;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值