2014-10-04 1 views
-1

링크 된 목록을 연구 중입니다. 이 책에서 문제를 연습하고 있습니다. 코딩 인터뷰 크래킹. 나는 그 노드를 삭제하기로 ....노드가 반환 유형으로 사용되는 함수를 사용하여 연결된 목록에서 노드를 삭제하는 방법

class Node { 

    Node next = null; 
    int data; 

    public Node (int d) { 
    data = d; 
    } 

    Node deleteNode(Node head, int d) { 
    Node n = head; 

    if (n.data == d) { 
     return head.next; 
    } 

    while (n.next != null) { 
     if (n.next.data == d) { 
     n.next = n.next.next; 
     return head; 
     } 
     n = n.next; 
    } 
    return head; 
    } 

내가 3 개 질문을했습니다 ... 나는 저자는 다음과 같은 코드를 구현하려고하는 방법을 이해 할 수없는, 붙어

질문 1 - deleteNode 함수의 인수로 전달할 내용은 무엇입니까? 노드 헤드는 어떤 용도로 사용됩니까? int d가 어떤 용도로 사용됩니까? 노드가 삭제하려는 노드의 헤드입니까? 아니면 우리의 머리 노드입니까? 내 말은,이 방법을 다음과 같이 사용하기로되어있는 것입니까?

"Name of node".deleteNode("Node name", "integer value"); 

"노드 이름"이 삭제하려는 노드입니다 ... 맞지 않습니까?

질문 2 - 코드에서 deleteNode 함수는 데이터 만 사용하여 삭제하려는 노드의 ID를 확인합니다. 예 : if (n.data == d). 그게 정상적인 연습인가요? 데이터 값과 동일한 정수를 포함하는 2 개의 다른 노드가 있으면 어떻게됩니까? 노드 이름을 사용하여 삭제할 노드를 지정하면 안됩니까?

질문 3 - 함수 deleteNode는 노드를 반환합니다. 왜 그런가요? 노드를 삭제하기 위해서, 우리는 단지 3 가지를해야합니다 ... 우선, 삭제하고 싶은 노드의 포인터의 링크를 해제하십시오. 둘째, 이전 노드의 포인터를 삭제하고자하는 노드의 포인터가 원래 가리키는 노드에 놓습니다. 셋째, 목록에 링크되어 있지 않은 노드를 삭제하십시오. 반환 유형 노드가 여기에 제공되는 목적이 무엇인지 모르겠다.

답변

0

질문 1 : 모든 게시물에 따라 노드의 "이름"에 대해 계속 이야기하지만 노드에는 이름이 없습니다. 그들은 int 가치와 후임자를 가지고 있습니다. 이 deleteNode 메서드에서 첫 번째 인수는 값 d의 첫 번째 항목을 제거 할 링크 된 목록의 머리글입니다.

질문 2 : 내가 말했듯이, 노드는 이름이 없으며 값에 의해 식별됩니다. 원하는 값이 발견되면 링크 된 목록에 동일한 값의 어커런스가 몇 개 있는지에 관계없이 해당 노드가 삭제됩니다.

질문 3 : 당신이 void 반환 유형을했다 방법, 당신이

myList.deleteNode(head,3).deleteNode(head,5).addNode(head,10) 

같은 체인 여러 번 호출해야 할 경우 있도록 방법은,리스트의 머리를 돌려

myList.deleteNode(head,3); 
myList.deleteNode(head,5); 
myList.addNode(head,10); 
+0

deleteNode 함수를 호출 할 때 정수 인수 만 전달합니다. 코드에서 볼 수 있듯이 2 개의 인수가 필요합니다 ... 설명? – satnam

+0

이례적인 일이므로 잊어 버리십시오. 머리는 실제로 그러한 호출에서 myList라고 예상 될 것이다. – Dici

관련 문제