수필 - 각 k 개 노드 반전 링크 (고 효율 해법)
k 는 정수 로 링크 의 길이 보다 작 거나 같 습 니 다.만약 에 노드 총수 가 k 의 정수 배가 아니라면 마지막 남 은 노드 를 원래 의 순서 로 유지 합 니 다.
예시:
이 링크 지정: 1 - > 2 - > 3 - > 4 - > 5
k = 2 시, 돌아 와 야 합 니 다: 2 - > 1 - > 4 - > 3 - > 5
k = 3 시, 돌아 와 야 합 니 다: 3 - > 2 - > 1 - > 4 - > 5
설명:
당신 의 알고리즘 은 상수 의 추가 공간 만 사용 할 수 있 습 니 다.너 는 단순히 노드 내부 의 값 을 바 꾸 는 것 이 아니 라 실제 적 으로 노드 교환 을 해 야 한다.
사고: 반전 함 수 를 따로 쓰 고 n% k = = 0 만 있 으 면 링크 가 반전 되 지 않 은 링크 의 결점 이 k 개 라 는 것 을 설명 한다. 그러면 반전 을 한다.또한 주의해 야 할 것 은 k 는 2 보다 크 고 반전 링크 가 의미 가 있다 는 것 이다.
코드 구현:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
ListNode newTail=null;
public void reverse(ListNode head,ListNode tail){
//head , , , ,
// cur ,
ListNode cur=head.next.next;//
ListNode curNext=cur.next;// ,
while(cur!=null){
// cur curNext ,while true
// tail ,cur
cur.next=head.next;//
head.next=cur;//
if(cur==tail){
newTail.next=curNext;// k
break;
}
cur=curNext;//
curNext=cur.next;
}
}
public ListNode reverseKGroup(ListNode head, int k) {
if(head==null||k<=1){
return head;
}
ListNode newHead=new ListNode(-1);// k
newHead.next=head;
ListNode tail=head;//
head=newHead;
int n=1;
while(tail!=null){
if(n%k==0){
newTail=newHead.next;//
reverse(newHead,tail);
newHead=newTail;//
tail=newTail;
}
tail=tail.next;
n++;
}
return head.next;
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
자바 디지털 처리 클래스 상용 방법 집합오늘 은 자바 의 디지털 처리 류 와 관련 된 내용 을 배 웠 습 니 다. 그 중에서 흔히 볼 수 있 는 방법 이 많 습 니 다. DecimalFormat 의 format () 과 apply Format () 방법 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.