2014-11-10 1 views
0

В настоящее время я выполнил свою функцию, чтобы поменять связанный список, но когда я возвращаю указатель на заголовок нового связанного списка, я получаю ошибки, потому что я хранил его неправильно в своей основной. Может ли кто-нибудь объяснить мне правильный синтаксис для хранения и печати вновь связанного списка?Как сохранить указатель (узел), возвращаемый функцией, в мою главную?

typedef struct Node { 
    int val; 
    struct Node * next; 
}LL_t; 

LL_t reverse(LL_t* ls) // passing me a head 
{ 

    \\ my code 

    return ls; // pretty sure this is how I return the new head node 
} 

int main() { 

\\ my code 

    LL_t *p = reverse(head); // not working, giving me these weird incompatible errors. 

    for (i = 0; i < 9; i++) 
    { 
     printf("*(p + %d) : %d\n", i, *(p + i)); 
    } 
    return 0; 
} 

Вот моя последняя ошибка после изменения моего переменного указателя р и пытается PRINTF его

INT * р; p = обратный (головной)

Ошибка;

main.c: 42: 6: предупреждение: назначение из несовместимого типа указателя [включено по умолчанию] p = reverse (head);

Edit2:

Я попытался тис подход, но не работаю для меня:

for (p->val != NULL) 
    { 
     printf("%d\n", p->val); 
     p->val = p->next; 
    } 
+1

Не могли бы вы рассказать нам, что такое ошибка? И откуда начинается «голова»? –

+0

Позвольте мне снять снимок экрана. – BeginnerC

+0

да, sory я не мог загрузить, говорит, что pic был слишком велик, – BeginnerC

ответ

2
LL_t reverse(LL_t* ls) { } 

принимает указатель, но возвращает структуру. Вам нужно:

LL_t *reverse(LL_t* ls) { } 
+0

Спасибо, как я могу исправить положение prinf? он продолжает говорить, что ожидает целое число, но я даю ему LL-t. Я как-то исправил его, но теперь он дает предупреждение, когда я меняю p на int * p – BeginnerC

+0

@BeginnerC printf не может распечатать LL_t. Возможно, вы хотите напечатать член 'val', и в этом случае вы будете использовать' p-> val'. Следующее, что вам нужно сделать, это перебрать связанный список, используя элемент 'p-> next' вместо цикла от 0 до 9 (вы не можете индексировать связанный список с переменной' i') – nos

+0

Два проблемы там. '* (p + i)' означает "элемент' i'th некоторого массива структур LL_t ". То есть, это структура, и такой массив не существует, что я вижу. Что вы пытаетесь напечатать? –

2

Причина вы столкнулись с проблемами, потому что ваша функция настроена вернуть узел LL_t, а не указатель на него. Зафиксировав объявление функции, вы не должны сталкиваться с любыми другими ошибками (по крайней мере, из предоставленного кода):

LL_t* reverse(LL_t* ls) { ... 
+0

Как исправить ошибку с помощью инструкции printf? Кажется, мне удалось заставить его работать с помощью switchig p для int * p, но я получаю предупреждение о несовместимых типах. – BeginnerC

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