[알고리즘] 단일 링크 와 더 블 링크 에서 마지막 k 번 째 노드 를 삭제 합 니 다.
각각 두 개의 함 수 를 실현 합 니 다. 하 나 는 싱글 체인 시트 의 마지막 K 번 째 노드 를 삭제 할 수 있 고 다른 하 나 는 더 블 링크 의 마지막 K 번 째 노드 를 삭제 할 수 있 습 니 다.
요청:
링크 길이 가 N 이면 시간 복잡 도가 O (N) 에 달 하고 추가 공간 복잡 도 는 O (1) 에 달한다.
해답:
체인 시 계 를 처음부터 끝까지 이동 시 키 고 한 걸음 이동 할 때마다 K 수 치 를 1 로 줄 입 니 다. 체인 시계 가 끝까지 갈 때 K 수치 가 0 보다 크 면 체인 시 계 를 조정 하지 않 아 도 된다 는 것 을 설명 합 니 다. 체인 시 계 는 꼴찌 K 번 째 노드 가 없 기 때문에 이때 원래 의 체인 시 계 를 직접 돌아 가면 됩 니 다.만약 에 K 값 이 0 이 라면 링크 의 마지막 K 번 째 노드 가 바로 머리 노드 라 는 것 을 의미한다. 이때 헤드. next 로 돌아 가면 머리 노드 를 삭제 한 셈 이다.K 의 값 이 0 보다 작 을 때 다시 처음부터 걷 고 한 걸음 씩 이동 할 때마다 K 의 값 을 1 로 추가 합 니 다.K 가 0 일 때 이동 이 멈 추고 이동 한 끝 점 은 삭제 할 끝 점 의 앞 점 이다.
링크 의 길 이 는 N 이 고 마지막 K 번 째 노드 를 삭제 하려 면 마지막 K 번 째 노드 의 앞 노드 가 바로 N - K 번 째 노드 입 니 다.처음 옮 겨 다 니 면서 K 값 이 K - N 으로 바 뀌 었 다.두 번 째 옮 겨 다 닐 때 K 의 값 은 1. 0 을 추가 하면 옮 겨 다 니 는 것 을 멈 추고 있 는 위 치 는 N - K 개의 노드 의 위치 입 니 다.
프로그램:
단일 체인 테이블:
public static class Node {
public int value;
public Node next;
public Node(int data) {
this.value = data;
}
}
public static Node removeLastKthNode(Node head, int lastKth) {
if (head == null || lastKth < 1) {
return head;
}
Node cur = head;
while (cur != null) {
lastKth--;
cur = cur.next;
}
if (lastKth == 0) {
head = head.next;
}
if (lastKth < 0) {
cur = head;
while (++lastKth != 0) {
cur = cur.next;
}
cur.next = cur.next.next;
}
return head;
}
더 블 링크:public static class DoubleNode {
public int value;
public DoubleNode last;
public DoubleNode next;
public DoubleNode(int data) {
this.value = data;
}
}
public static DoubleNode removeLastKthNode(DoubleNode head, int lastKth) {
if (head == null || lastKth < 1) {
return head;
}
DoubleNode cur = head;
while (cur != null) {
lastKth--;
cur = cur.next;
}
if (lastKth == 0) {
head = head.next;
head.last = null;
}
if (lastKth < 0) {
cur = head;
while (++lastKth != 0) {
cur = cur.next;
}
DoubleNode newNext = cur.next.next;
cur.next = newNext;
if (newNext != null) {
newNext.last = cur;
}
}
return head;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.