[알고리즘] 링크 의 중간 노드 삭제

3045 단어
제목 1:
링크 의 헤드 노드 를 지정 하여 링크 중간 노드 를 삭제 하 는 함 수 를 실현 합 니 다.
생각:
기본 해법:
먼저 링크 를 한 번 훑 어 보고 링크 노드 의 개 수 를 계산한다.그 다음 에 중간 노드 의 위 치 를 계산 하고 링크 를 다시 옮 겨 다 니 며 중간 노드 의 앞 위 치 를 찾 아 삭제 작업 을 한다.
하지만 한 번 만 옮 겨 다 니 면 이 작업 을 완성 할 수 있 습 니 다.
링크 길이
중간 노드 의 위치
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;
  

링크 의 중간 노드 를 찾 는 것 은 링크 알고리즘 에서 매우 자주 사용 되 는 것 이다.유연 한 응용 에 주의 하 다.

좋은 웹페이지 즐겨찾기