您当前的位置: 首页 >  链表

对方正在debug

暂无认证

  • 3浏览

    0关注

    399博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

K 个一组翻转链表

对方正在debug 发布时间:2020-02-15 09:33:23 ,浏览量:3

题目:https://leetcode-cn.com/problems/reverse-nodes-in-k-group/submissions/

#include
using namespace std;


struct ListNode {
    int val;
    ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
};
class Solution {
public:
    ListNode* reverseKGroup(ListNode* head, int k) {
    	/*
    	*给一个链表,每k个节点一组进行翻转,
		*返回翻转后的链表
    	*/
        if(k == 1) return head;//特判 
        //确定是否有k个数
        ListNode *p1 = head;
        bool flag = 1;
        for(int i = 1;i next == NULL){
                flag = 0;break;
            }
            p1 = p1->next;
        }
        if(!flag) return head;
        //前k个数翻转
        p1 = head->next;
        ListNode *p2 = head->next;
        ListNode *pre = head;
        ListNode *fi = head;//头元素
        for(int i = 2;i next;
            p1->next = pre;
            pre = p1;//更新pre 
            p1 = p2;//更新p1 
        }
        fi->next = p2->next;
        p2->next = pre;
        head = p2;//更新head 

		ListNode *ed = fi;//设置尾元素 
        fi = fi->next;//更新fi 
        while(1) {
            //确定是否有k个数
            p1 = fi;
            flag = 1;
            for(int i = 1;i next == NULL){
                    flag = 0;break;
                }
                p1 = p1->next;
            }
            if(!flag) return head;
			
            //k个数翻转
            p1 = p2 = fi->next;
            pre = fi;
            for(int i = 2;i next;
                p1->next = pre;
                pre = p1;//更新pre 
                p1 = p2;//更新p1 
            }
            fi->next = p2->next;
            p2->next = pre;
            ed->next = p2;//衔接前k个元素 
            
            ed = fi;//更新ed 
            fi = fi->next;//更新fi 
        }
        
    }
    void print(ListNode* head) {
    	while(head != NULL) {
    		printf("%d ",head->val);
    		head = head->next;
		}
		printf("\n");
	}
};
int main(int argc, char *argv[])
{
	Solution solution;
	int n,x,k;
	ListNode* head = new ListNode(-1);
	ListNode* cur = head;
	scanf("%d",&n);
	while(n--) {
		scanf("%d",&x);
		cur->next = new ListNode(x);
		cur = cur->next;
	}
	scanf("%d",&k);
//	solution.print(head->next);// 
	solution.reverseKGroup(head->next,k);
	return 0;
}
/*
4 
1 2 3 4
4

4
1 2 3 4
2
*/ 
关注
打赏
1664895754
查看更多评论
立即登录/注册

微信扫码登录

0.1973s