Delete Node in a Linked List(체인 테이블의 노드 삭제)

2131 단어 LetCode 문제집
Write a function to delete a node (except the tail) in a singly linked list, given only access to that node.(꼬리 노드를 제외한 체인 테이블 노드를 삭제하는 함수를 실현하고 삭제된 노드에만 접근할 수 있다고 가정한다)
Supposed the linked list is 1 -> 2 -> 3 -> 4 and you are given the third node with value 3, the linked list should become 1 -> 2 -> 4after calling your function.(한 체인 테이블을 1->2->3->4로 가정하고 값이 3인 노드를 지정하면 기능 함수를 호출한 체인 테이블은 1->2->4로 변해야 한다)
1. 개인 분석은 이 삭제 노드의 기능을 실현하기 쉽다. 직접 표두에서 지정된 노드를 하나하나 찾아보면 삭제할 수 있다. 또한 여기서 꼬리 노드가 목표 노드로 삭제될 수 없기 때문에 판단해야 한다.앞의 해결 방법은 제목의 뜻에 부합되지 않는다. 사실 이 문제의 함수 매개 변수는 목표 노드의 바늘만 정하고 체인 표의 머리 바늘이 없기 때문에 이 문제는 목표 노드의 앞 노드의 바늘이 없으면 노드의 삭제를 어떻게 실현해야 하는지를 고찰하는 것이다.이 문제는 앞서 검지Offer에서 비슷한 제목을 보았는데, 책에서 소개한 방법은 목표 노드의 앞 노드를 가리키는 지침이 없지만 목표 노드의 값을 목표 노드에 부여할 수 있어 간접적으로 목표 노드를 삭제하고 체인 시계가 끊어지지 않도록 하는 것이다.모두 두 단계로 나뉜다. 첫째, 목표 노드node 뒤 노드의 값을 목표 노드에 부여한다.둘째, 목표 노드의next 바늘을 아래 노드를 가리키고node->next를 삭제합니다.
2. 개인적 해결 방법
void deleteNode(struct ListNode* node) 
{
    struct ListNode *pNodeNext = node->next;

    node->val = pNodeNext->val;
    node->next = pNodeNext->next;

    free(pNodeNext);
}

3. 개인 총결산
  • 처음에 자신이 가장 직접적인 방법으로 목표 노드 뒤의 모든 노드를 한 위치로 옮기기 때문에 실현 과정이 매우 복잡하다. 사실 지침의 지향을 바꾸면 실현할 수 있다.또한 참고 해법을 보기 전에 왜 내가 생각하지 못했는지 생각해 봤다. 아마도 자신이'삭제'라는 단어에 대한 이해가 부족했을 것이다. 만약에'삭제'를'덮어쓰기'로 이해하는 것이 더 좋을 것이다. 컴퓨터에서 많은 삭제된 대상은'덮어쓰기'로 표시되는 것과 같다.
  • 개인은 이 쉬운 것에서 어려운 것까지의 사고 과정이 정상적이라고 생각한다. 새로운 문제에 부딪히면 가장 직관적이고 소박한 방법에서 착안한 다음에 결과에 따라 계속 개선해야 하는지를 판단하고 이런 과정을 끊임없이 반복하면 반드시 자신의 만족스러운 결과를 얻을 수 있다.

  • PS:
  • 제목의 중국어 번역은 본인이 쓴 것이니 편차가 있으면 바로잡아 주십시오.
  • 그 중에서'개인 분석'과'개인 해법'은 모두 본인의 최초의 생각과 방법으로 반드시 옳은 것은 아니라 대조와 기록일 뿐이다.
  • 좋은 웹페이지 즐겨찾기