2015-05-12 3 views
0

У меня есть код, и я хочу убедиться, что я понимаю, как он повлияет на связанный список. Я закодировал его, и он напечатал только первый номер списка, который в моем случае был 4. Так что скажем, что этот список был [4,7,1,7,2,0], код сделает список [4].Как этот код повлияет на связанный список?

Node x = head; 

while (x != null) { 
    while ((x.next != null) && (x.next.item >= x.item)) { 
     x.next = x.next.next; 
    } 

    x = x.next; 
} 

Я не уверен, что понимаю, почему, и это, если мой код верен. Мне был дан только этот код, поэтому я должен понимать его, не кодируя его.

+0

Какой ожидаемый результат для вашего ввода? –

ответ

0

Я подозреваю, что:

x.next = x.next.next; 

должен быть

x = x.next; 
+0

Ну, я думаю, если я читаю, если правильно, если x.next.item> = x.item, пропустите элемент x.next и перейдите к x.next.next. Таким образом, 7 больше 4, поэтому 4 будет указывать на 1. Это именно то, что мне было дано, поэтому я пытаюсь просто понять это как это. – g3347090

0

Поток кода поясняется в комментариях.

Node x = head; //x points to head node. 
while (x != null) { 
    // continue until x is not null. If x is not null then go to next while. 
    while ((x.next != null) && (x.next.item >= x.item)) { 
     // continue until next of `x` is also not null and its value is greater than value of some node p (I assume it is previous but not sure as not mentioned) 
     x.next = x.next.next; // set next of x to next of next of x (two nodes ahead of x) 
     // say x points to 1 and linked list is (nodes and not values) 1 -> 2 -> 3 -> 4 then next of x (pointing to 2) now points to next of next of x (3). 
    } 
    x = x.next; // x is now pointing to next of x (which is less than x). 
} 

Если элементы 40 -> 50 -> 60 -> 20 -> 10 Конечный результат х будет указывать на 10. Может быть, они хотят х, чтобы указать на наименьший узел в списке.

+0

Извините, мы просто узнаем о связанных списках, что, вероятно, почему это было дано. И p.item должен быть x.item я ошибочно. – g3347090

0

Кажется, что код пытается удалить все элементы, которые больше, чем элемент, который перед ним. В нем говорится удалить следующий элемент, если элемент следующего элемента больше, чем элемент текущего элемента, но переместите указатель x вперед к следующему элементу (сохраняет элемент), если следующий элемент будет меньше, чем x.item. Как вы проверяете, что такое связанный список? Результат, похоже, должен быть [4 1 0]

+0

Жаль, что это был x.item не p.item, typo. Ну, у меня была целая связанная настройка списка, которую я закодировал, но это должно быть сделано без кодирования, поэтому я пытаюсь понять, как выглядит список после этого. – g3347090

+0

Я изменил свой ответ, чтобы соответствовать вашим изменениям –