25. K 한 조 뒤 집기 링크
k 정수 입 니 다. 그것 의 값 은 링크 의 길이 보다 작 거나 같 습 니 다.
노드 총수 가 아니라면 k 의 정수 배 입 니 다. 그러면 마지막 남 은 노드 를 원래 의 순서 로 유지 하 십시오.
예시:
이 링크 를 드 리 겠 습 니 다: 1 - > 2 - > 3 - > 4 - > 5
... 해 야 한다 k = 2 시, 돌아 와 야 합 니 다: 2 - > 1 - > 4 - > 3 - > 5
... 해 야 한다 k = 3 시, 돌아 와 야 합 니 다: 3 - > 2 - > 1 - > 4 - > 5
설명:
당신 의 알고리즘 은 상수 의 추가 공간 만 사용 할 수 있 습 니 다.너 는 단순히 노드 내부 의 값 을 바 꾸 는 것 이 아니 라 실제 적 으로 노드 교환 을 해 야 한다.
출처: 스냅 백 (LeetCode) 링크:https://leetcode-cn.com/problems/reverse-nodes-in-k-group 저작권 은 인터넷 에 귀속 된다.상업 전 재 는 정부 에 연락 하여 권한 을 부여 해 주 십시오. 비 상업 전 재 는 출처 를 밝 혀 주 십시오.
문제 풀이: 순수 시 뮬 레이 션, 매번 k 개의 결점 을 취하 여 뒤 집 고 뒤 집 은 후에 다시 연결 하면 됩 니 다.
class Solution {
public:
ListNode* work(ListNode* l, ListNode* r){ // [l,r]
r->next=NULL;
ListNode* rt=new ListNode(-1);
ListNode* p=rt;
rt->next=l; p=l;
r=l->next;
while(r){
p->next=r->next;
rt->next=r;
r->next=l;
l=r;
r=p->next;
}
return rt->next;
}
ListNode* reverseKGroup(ListNode* head, int k) {
if(head==NULL||head->next==NULL||k<=1) return head;
ListNode* rt=new ListNode(-1);
ListNode* p=rt;
int num=0; //
ListNode* l=NULL; ListNode* r=head;
while(r){
num++;
if(num%k==1) {l=r; r=r->next;} //
else if(num%k==0){ //
ListNode* e=r;
r=r->next;
p->next=work(l,e);
while(p->next) p=p->next;
}else r=r->next;
}
if(num%k!=0) p->next=l; // k
return rt->next;
}
};
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
하나의 단일 체인 테이블의 순환과 귀속 실현을 반전시키다텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.