[알고리즘] 링크 의 중간 노드 삭제
링크 의 헤드 노드 를 지정 하여 링크 중간 노드 를 삭제 하 는 함 수 를 실현 합 니 다.
생각:
기본 해법:
먼저 링크 를 한 번 훑 어 보고 링크 노드 의 개 수 를 계산한다.그 다음 에 중간 노드 의 위 치 를 계산 하고 링크 를 다시 옮 겨 다 니 며 중간 노드 의 앞 위 치 를 찾 아 삭제 작업 을 한다.
하지만 한 번 만 옮 겨 다 니 면 이 작업 을 완성 할 수 있 습 니 다.
링크 길이
중간 노드 의 위치
1
1
2
1
3
2
4
2
5
3
6
3
7
4
8
4
…
…
이 를 통 해 알 수 있 듯 이 링크 의 길 이 는 두 개의 노드 가 증가 할 때마다 중간 노드 의 위 치 는 오른쪽으로 한 자 리 를 이동 합 니 다.그래서 우 리 는 두 개의 변수 pre 와 cur 를 설정 할 수 있 습 니 다. cur 는 현재 옮 겨 다 니 는 위 치 를 표시 하고 pre 는 머리 끝 에서 cur 까지 의 중간 노드 의 앞 노드 의 위 치 를 표시 합 니 다.링크 를 옮 겨 다 니 는 과정 에서 cur 는 한 번 에 오른쪽으로 두 노드 를 이동 하면 pre 는 한 번 에 오른쪽으로 한 노드 를 이동 합 니 다.물론 상기 과정 은 cur. next 및 cur. next. next 가 비어 있 는 지 판단 하 는 데 주의해 야 한다.한 번 에 옮 겨 다 니 면 cur 는 마지막 노드 나 마지막 두 번 째 노드 를 가리 키 고 pre 는 전체 링크 중간 노드 의 앞 노드 의 위 치 를 가리킨다.
public static class Node {
public int value;
public Node next;
public Node(int data) {
this.value = data;
}
}
public static Node removeMidNode(Node head) {
if (head == null || head.next == null) {
return head;
}
if (head.next.next == null) {
return head.next;
}
Node pre = head;
Node cur = head.next.next;
while (cur.next != null && cur.next.next != null) {
pre = pre.next;
cur = cur.next.next;
}
pre.next = pre.next.next;
return head;
링크 의 중간 노드 를 찾 는 것 은 링크 알고리즘 에서 매우 자주 사용 되 는 것 이다.유연 한 응용 에 주의 하 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.