簡體   English   中英

從c中的結尾獲取鏈表中的節點值

[英]Get node value in linkedlist from end in c

我正在做這個hackerrank問題( https://www.hackerrank.com/challenges/get-the-value-of-the-node-at-a-specific-position-from-the-tail )我的代碼如下 -

int GetNode(Node *head,int positionFromTail)
{
  Node *prev = NULL;
  Node *current = head;
  Node *next;
  while(current!=NULL){
     next = current->next;
     current->next = prev;
     prev = current;
     current = next;
  }
  head = prev;
  int p=0;
  while(head->next!=NULL){
    if(p== positionFromTail){
        return head->data;
    }
    else {
        p++;
        head= head->next;
    }
  } 
}

因此,我要做的是,我首先反轉了鏈表,然后循環查找特定位置,然后打印其值。 這是正確的方法嗎? 它給了我這個錯誤。

  solution.cc: In function ‘int GetNode(Node*, int)’:
  solution.cc:42:1: error: control reaches end of non-void function [Werror=return-type]
   }
   ^
   cc1plus: some warnings being treated as errors

由於以下限制,問題語句使代碼無法在不返回值的情況下到達函數末尾:

約束

位置將是鏈表中的有效元素。

但是,C編譯器不知道while循環永遠不會在到達NULL退出,從而保證return head->data最終將被執行,因此它會發出錯誤。

您可以通過在結尾處提供未使用的return ,或將循環設為無限來解決此問題。

注意:您的解決方案會反轉該列表,該列表可能不是最佳的。 通過一次遍歷列表,可以通過在數組中存儲positionFromTail + 1尾隨項來避免反轉:

int GetNode(Node *head,int positionFromTail) {
    int data[++positionFromTail], p = 0;
    while (head) {
        data[p] = head->data;
        head = head->next;
        p = (p+1) % positionFromTail;
    }
    return data[p];
}

每個可能離開函數的分支都需要返回一個值。

如果初始head->nextNULL則不會到達您編碼的return語句。

設計代碼以使其具有僅一個可能的退出點的功能。

看起來可能如下所示:

/* returns pay-load or INT_MIN if list is empty or searched pos is negativ*/

int GetNode(Node *head, int positionFromTail)
{
  int result = INT_MIN;

  ...

  while (head->next != NULL) {
    if(p == positionFromTail) {
      result = head->data;
      break;
    }
    else {
      p++;
      head = head->next;
    }
  } 

  return result;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM