2016-12-16 2 views
-3

здесь у меня проблема. Я думаю, что в функции размера я хочу иметь размер всего связанного списка до и после удаления в основном, функция размера говорит об ошибке «размер должен возвращать значение», а возвращаемое значение не соответствует типу возврата! ! приветствие за помощь! БлагодаряРазмер Функция связанного списка?

//SLL Basic insert , delete and search functions 

#include<iostream> 
using namespace std; 

/* defines the structure of a single linked list node*/ 
typedef struct list_node { 
    int data; 
    struct list_node *next; // pointer to next node in the list 
}node; 

/* create new node */ 
node *getNewNode(int data) { 
    node *new_node = new node; 
    new_node->data = data; 
    new_node->next = NULL; 
    return new_node; 
} 

/* get size of list */ 
node* size(node *head) 
{ 
    int len = 0; 
    while (head != NULL) 
    { 
     len++; 
     head = head->next; 

    } 
    return len; 
} 

/* displays the list elements */ 
void displayList(node *head) { 
    cout << "Displaying List : "; 
    while (head != NULL) { 
     cout << head->data << " -> "; 
     head = head->next; 
    } 
    cout << "NULL " << endl; 
} 

/* Search the node with element as data 
Return the pointer to the node if found else return NULL */ 
node *searchNode(node *head, int data) { 
    node *ptr = NULL; 
    while (head) { 
     if (head->data == data) { 
      ptr = head; 
      break; 
     } 
     head = head->next; 
    } 
    return ptr; 
} 

/* insert a node at the beginning of the list */ 
node *insertNodeBeg(node *head, int data) { 
    node *ptr = getNewNode(data); 
    if (head == NULL) { // if list is empty 
     head = ptr; 
    } 
    else { 
     ptr->next = head; 
     head = ptr; 
    } 
    return head; 
} 

/* insert a node at the end of the list */ 
node *insertNodeEnd(node *head, int data) { 
    node *ptr = getNewNode(data); 
    if (head == NULL) { //if list is empty 
     head = ptr; 
    } 
    else { 
     node *temp = head; 
     while (temp->next != NULL) { // move to the last node 
      temp = temp->next; 
     } 
     temp->next = ptr; // insert node at the end 
    } 
    return head; 
} 

/* insert a node at the after a particular node in the list */ 
node *insertNodeAfter(node *head, int element, int data) { 
    // search the element after which node is to be inserted 
    node *temp = searchNode(head, element); 
    if (temp == NULL) { // element not found 
     cout << "Element not found ... " << endl; 
    } 
    else { 
     node *ptr = getNewNode(data); 
     if (temp->next == NULL) { // node has to inserted after the last node 
      temp->next = ptr; 
     } 
     else { // insert the node after the first or an intermediate node 
      ptr->next = temp->next; 
      temp->next = ptr; 
     } 
    } 
    return head; 
} 

/* delete a particular node from the list */ 
node *deleteNode(node *head, int element) { 
    node *temp = searchNode(head, element); // search the node to be deleted 
    if (temp == NULL) { // element not found 
     cout << "Node to be deleted not found ... " << endl; 
    } 
    else { 
     if (temp == head) { // first node is to be deleted 
      head = head->next; 
      delete temp; 
     } 
     else { // node to deleted is an intermediate or last node 
      node *ptr = head; 
      while (ptr->next != temp) { 
       ptr = ptr->next; 
      } 
      ptr->next = temp->next; 
      delete temp; 
     } 
    } 
    return head; 
} 

int main() 
{ 
    node *head = NULL; 
    head = insertNodeBeg(head, 7);  // 7 
    head = insertNodeBeg(head, 9);  // 9 -> 7 
    head = insertNodeEnd(head, 11);  // 9 -> 7 -> 11 
    head = insertNodeAfter(head, 9, 4); // 9 -> 4 -> 7 -> 11 
    head = insertNodeAfter(head, 7, 3); // 9 -> 4 -> 7 -> 3 -> 11 
    head = insertNodeAfter(head, 11, 6); // 9 -> 4 -> 7 -> 3 -> 11 -> 6 
    head = size(head);// HERE i want to give size of LIST i,e 6 in this case !! 
    displayList(head); 
    head = deleteNode(head, 7);   // 9 -> 4 -> 3 -> 11 -> 6 
    head = deleteNode(head, 6);   // 9 -> 4 -> 3 -> 11 
    head = deleteNode(head, 9);   // 4 -> 3 -> 11 
    head = deleteNode(head, 3);   // 4 -> 11 
    displayList(head); 
    return 0; 
} 
+4

Изучите прототип, который вы написали для 'size' тщательно. В частности, его тип возврата. – molbdnilo

+0

Кстати, рекомендуется только вставить код, необходимый для вывода ошибки. – Sethmr

+0

Я просто ищу лучший матч –

ответ

0

заявление return len; является возвращение Int заявленного int len = 0;, но ваше определение функции является node* size(node *head), который ожидает, что вы вернуть указатель на структуру узла. Изменить node* size(...) на int size(...)

+0

Спасибо, что его решили !!! –

0

Введите тип возвращаемого значения "int" вместо "node *". Вернее, сделайте его size_t, поскольку это должно быть целое число без знака.

/* get size of list */ 
    size_t size(node *head) 
    { 
     size_t len = 0; 
     while (head != NULL) 
     { 
      len++; 
      head = head->next; 
     } 
     return len; 
    } 
+0

size_t - вот что здесь –

+0

size_t - это целочисленный тип без знака, определенный в заголовке «string.h». Насколько велика (4 байта или 8 байт), определена реализация. Вы можете заменить его «unsigned int». – Jack

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