왜 연결리스트에 대한 부모 클래스를 가질

소 날리 굽타 :

이것은 어쩌면 OOP 개념에 대한 일반적인 질문입니다. 난 그냥 자바에서 DS 구현에 시작입니다. 나는 연결리스트를 구현하기 위해 노력하고, 모든 온라인 rsources에, 나는 비슷한 사례를 참조하십시오

  1. 노드 클래스를 확인합니다.
  2. 노드 객체가있는 클래스 링크 된 목록을 확인합니다.

마찬가지로 나는 스택, 큐와 나무를 보았다. 난 단지 외모 아래 좋아하는 하나 개의 클래스를함으로써 LinkedList의를 구현하는 경우 내 질문입니다 :

 class LinkList {
     int data;
     LinkList next; }

나는 아직도 모든 작업을 할 수 있어요. 루트를 포함하거나 헤더는 OOP의 목적이나 뭔가 다른 제 2 클래스를 갖는 개념 그래서? 나는 다음과 같은 코드를 작성하며 헤더 포인터가 필요없이 잘 작동합니다. 나는 모든 방법에 참조 변수를 사용하여 메인 클래스의 객체는 여전히 머리를 추적합니다.

/* package codechef; // don't place package name! */

import java.util.*;
import java.lang.*;
import java.io.*;

class LinkList {
    int data;
    LinkList next;

    LinkList(){
        data = 0;
        next = null;
    }

    LinkList(int data) {
        this.data = data;
        next = null;
    }
    LinkList insertAtBegin(int data){
        LinkList newBegin = new LinkList(data);
        newBegin.next = this;
        return newBegin;
    }
    void insertAtPlace(int data, int insertData){
        LinkList newNode = new LinkList(insertData);
        LinkList iterator = this;
        while(iterator!=null && iterator.data!=data){
            iterator = iterator.next;
        }
        if(iterator.data == data)
        {
            newNode.next = iterator.next;
            iterator.next = newNode;
        }
    }
    void insertAtLast(int data) {
        if(next == null){
            next = new LinkList(data);
        }
        else{
            next.insertAtLast(data);
        }
    }

}

/* Name of the class has to be "Main" only if the class is public. */
class Codechef
{
    public static void main (String[] args) throws java.lang.Exception
    {
        // your code goes here
        LinkList linkList = new LinkList(6);
        linkList.insertAtLast(5);
        linkList.insertAtLast(3);
        linkList.insertAtLast(2);
        linkList.insertAtLast(1);

        linkList = linkList.insertAtBegin(10);
        LinkList iterator = linkList;
        while(iterator!=null){
            System.out.print(iterator.data);
            iterator = iterator.next;
        }
        System.out.print("\n");
        linkList.insertAtPlace(5,-1);
        iterator = linkList;
        while(iterator!=null){
            System.out.print(iterator.data);
            iterator = iterator.next;
        }
    }
}
그들은했다 :

당신은 연결리스트의 어딘가의 머리를 추적해야합니다. 그렇지 않으면, 당신은 어떻게 전체 목록을 반복하거나 목록의 요소를 검색 할 것인가?

귀하의 경우 LinkList기본적으로 (데이터와 다음 노드를 참조) 노드를, 당신은의 헤드 노드를 추적 일부 별도의 클래스에 (등 ..., 추가, 삭제) 모든 연결리스트 작업을 구현해야합니다 명부.

이것은 노드 클래스를 사용하는 연결리스트 클래스에 백업 제공합니다.

당신이 추가 한 코드에 관해서는, LinkList insertAtBegin(int data)당신이 목록의 첫 번째 노드에서 호출하는 경우에만 목록의 시작 부분에 노드를 삽입합니다. 그러나 거기의 아무것도 그것이 본질적으로 새로운 목록을 반환하는 경우 목록의 모든 노드에 전화에서 당신을 중지하지 그 원래 목록의 하위 목록과 함께 새로운 요소와 끝이 시작됩니다.

추천

출처http://43.154.161.224:23101/article/api/json?id=227007&siteId=1