Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / В чем глюк в связанном списке? / 5 сообщений из 5, страница 1 из 1
21.04.2007, 11:33:51
    #34477904
A.D.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем глюк в связанном списке?
День добрый!
Колупаю я так, потихоньку Java, и вот добрался до темки "Связанный список".
Определение дано такое: связанный список является некоторой совокупностью объектов, где каждый объект в списке имеет ссылку на следующий объект. Вроде, все понятно. Но дальше предлагается код:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
 public   class  myLinkedList
{

      public  myLinkedList(){}


       public  myLinkedList(Object item)
	  {
	      if  (item!= null )
	      start = end = current =  new  ListItem(item);
	       
	  }


       public  myLinkedList(Object [] items)
	  {
          if  (items!= null )
         {
			  for ( int  i =  0 ;i<items.length;i++ )
			 addItem(items[i]);

			 current = start;
         }
	  }


	   public   void  addItem(Object item)
	{

      ListItem newEnd =  new  ListItem(item);

       if (start== null )
         start=end=newEnd;
             else 
		{
		   end.next = newEnd;
             System.out.println("\n end.next (in addItem)= " + end.next); 
		   end = newEnd;

		   System.out.println(" \n end (in addItem)= " + end); 
		
		}
           
   	}

     public  Object getFirst()
	{
       current = start;
	    return  start ==  null  ?  null  : start.item;

	}

     public  Object getNext()
	{

      if (current!= null )
     {
         current = current.next;
     }
     
	     return  current ==  null  ?  null  : current.item;
	}

	 private  ListItem start =  null ;
	 private  ListItem end =  null ;
	 private  ListItem current =  null ;

            private   class  ListItem
            {
	            public  ListItem(Object item) 
              	{
	         	 this .item  = item;
	          	next =  null ;
		}

          public  String toString()
	       {
              return  "\n  item = (" + item + "),  next:  (" +  next + ") ";
	       }
            private  Object item;
            private  ListItem next;
             } 
}

И этот класс используется для создания полилинии:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
 import  Geometry.*;

 public   class  PolyLine
{
	 public  PolyLine( double  [][] coords) 
	{

      myPoint [] points =  new  myPoint[coords.length];

	   for ( int  i =  0 ;i<coords.length;i++ )
	  {
          points[i]=  new  myPoint(coords[i][ 0 ],coords[i][ 1 ]);

		  polyline =  new  myLinkedList(points);
	  }

	}

      PolyLine(myPoint [] points) 
	{

        polyline =  new  myLinkedList(points);
	}


        public   void  addPoint(myPoint point)
	{
      polyline.addItem(point);
    
	}


        public   void  addPoint( double  x,  double  y)
	{
      polyline.addItem( new  myPoint(x,y));
    
	}

        public  String toString()
	{

         StringBuffer str =  new  StringBuffer("Polyline");
		 myPoint point = (myPoint) polyline.getFirst();

		  while  ( point !=  null )
		 {
			 str.append(" (" + point + ") ");
 		  point = (myPoint) polyline.getNext();
		 }

          return  str.toString();

	}
    
	  private  myLinkedList polyline;
}


Когда я создал класс для проверки всего этого, выплыла интересная деталь:
сначала ссылке на следующий элемент присваивается ссылка на след. эл-т (т.е. то, что и должно быть), но затем самому элементу присваивается след. эл-т(т.е. ссылка и сам элемент одно и то же) . Плюс ко всему, элемент списка start (т.е. начальный элемент) всегда имеет ссылку на след. эл-т равной null.
Вот и хочу понять это так и должно быть или это опечатки в книге?

Заранее благодарен.
С уважением.
...
Рейтинг: 0 / 0
21.04.2007, 14:29:09
    #34478009
буйхо
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем глюк в связанном списке?
Ты бы внятно написал, а то получается "масло маслянное": элемент, элемент, элемент, элемент. Их там до ж..., названия переменных давай или хотя бы номера строк указывай, по которым у тебя вопросы. авторсначала ссылке на следующий элемент присваивается ссылка на след. эл-т - ну бред же написан. Если ты про
Код: plaintext
1.
2.
end.next = newEnd;
...
end = newEnd; 
, то это нормально. Сначала ссылке на следующий элемент присваивается ссылка на добавляемый объект, а end нужен если ты будет нужен getLast. Нафига в полилайне делать
Код: plaintext
polyline =  new  myLinkedList(points);
внутри цикла - не знаю.
...
Рейтинг: 0 / 0
21.04.2007, 15:20:28
    #34478058
A.D.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем глюк в связанном списке?
Извиняюсь, что несколько сумбурно написал. Просто, там приведена, примерно такая схемка:
Что ссылка next указывает на следующий элемент списка, а в примере получается, что она как бы указывает на этот же элемент, а не на следующий...
...
Рейтинг: 0 / 0
21.04.2007, 17:27:13
    #34478122
буйхо
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем глюк в связанном списке?
Это где это в примере, на какой строке это видно?
...
Рейтинг: 0 / 0
21.04.2007, 17:40:26
    #34478129
A.D.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем глюк в связанном списке?
Так я, как раз, про это:

end.next = newEnd (ссылка на след. элемент = newEnd)
end = newEnd (теперь и сам элемент = newEnd)

Причем они оба меняются один за другим.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / В чем глюк в связанном списке? / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]