2015-05-04 2 views
0
class Cell<T> { 
    T first; 
    Cell<T> next; 
    Cell(T f,Cell<T> n) { 
     first=f; 
     next=n; 
    } 
} 

Пусть у нас есть три переменных LS1, LS2 и PTR типа Cell<Character> и ячейки и указатели ниже диаграмма дает начальное положение: enter image description hereКлетки и указатели переменных

Нарисовать диаграмму клетки-и-указатели который будет представлять ситуацию после того, как в следующих строках кода были выполнены:

ls2.next.first='z'; 
ls1.next=ls1.next.next; 
for(ptr=ls2; ptr!=null; ptr=ptr.next) 
ls1 = new Cell(ptr.first,ls1); 

Попытка: После первой строки b изменяется на z. После второй строки y изменяется на z. Но я не уверен, что это правильно или что происходит дальше.

+2

java не имеет указателей. У него есть ссылки –

+0

Я знаю, но вопрос требует рисовать ячейки и диаграмму указателя – Aceboy1993

+0

'y' не заменяется на' z' вместо 'x.next => z' и' y' отбрасывается. –

ответ

1

Вы правы в первой части. Линия ls2.next.first='z'; изменит ваши списки, чтобы быть:

ls1 --> x --> y --> z --> c 
ls2 --> a ---------^ 

Вы в основном изменить значение клетки.

Затем вторая линия ls1.next=ls1.next.next; будет отбрасывать у элемента первого списка:

ls1 --> x --> z --> c 
ls2 --> a ---^ 

И тогда у вас есть цикл. Внутри этого цикла вы бежите по всем элементам LS2 и создать новые элементы во главе LS1, как таковой:

ls1 --> a --> x --> z --> c 
ls2 --> a ---------^ 

ls1 --> z --> a --> x --> z --> c 
ls2 --> a ---------------^ 

ls1 --> c --> z --> a --> x --> z --> c 
ls2 --> a ---------------------^ 

Обратите внимание, что при создании этих новых клеток, вы передаете их значение (по какой-то причине в вашем коде под названием first), что создает совершенно новый объект, который не подключен.

0

ls1 = czaxzc ls2 = azc Ниже приведен код на Java.

public class Main { 

    public static void main(String[] args) { 
     Cell<Character> c = new Cell<>('c',null); 
     Cell<Character> b = new Cell<>('b',c); 
     Cell<Character> y = new Cell<>('y',b); 
     Cell<Character> x = new Cell<>('x',y); 
     Cell<Character> a = new Cell<>('a',b); 


     Cell<Character> ls1 = x; 
     Cell<Character> ls2 = a; 



     ls2.next.first = 'z'; 
     ls1.next = ls1.next.next; 
     for (Cell ptr = ls2; ptr != null; ptr = ptr.next) { 
      ls1 = new Cell(ptr.first, ls1); 
     } 

     print(ls1); 
     print(ls2); 

    } 

    public static void print(Cell list) { 
     for (Cell ptr = list; ptr != null; ptr = ptr.next) { 
      System.out.print(ptr.first); 
     } 
     System.out.println(""); 
    } 

    static class Cell<T> { 
     T first; 
     Cell<T> next; 

     Cell(T f, Cell<T> n) { 
      first = f; 
      next = n; 
     } 
    } 

} 
Смежные вопросы