在 C++ 中查詢連結串列中的分數 (或 n/k –th) 節點


假設我們有一個單鏈表和數字 k。我們需要編寫一個函式來查詢 (n/k)th 元素,其中 n 是連結串列中元素的數量。對於小數,我們將選擇向上取整的值。因此,如果連結串列是 1、2、3、4、5、6,且 k = 2,那麼輸出將為 3,因為 n = 6,且 k = 2,那麼我們將列印 n/k 第 n 個節點,即 6/2 的第 n 個節點 = 第 3 個節點即 3。

為了解決此問題,我們必須按照以下步驟進行操作 −

  • 取兩個名為 temp 和 fracPoint 的指標,分別將其初始化為 null 和 start。
  • 對於 temp 指標的每次 k 次跳躍,進行 fracPoint 指標的一次跳躍。

示例

 線上演示

#include<iostream>
using namespace std;
class Node {
   public:
      int data;
      Node* next;
};
Node* getNode(int data) {
   Node* new_node = new Node;
   new_node->data = data;
   new_node->next = NULL;
   return new_node;
}
Node* fractionalNodes(Node* start, int k) {
   if (k <= 0 || start == NULL)
      return NULL;
   Node* fracPoint = NULL;
   int i = 0;
   for (Node* temp = start; temp != NULL; temp = temp->next) {
      if (i % k == 0) {
         if (fracPoint == NULL)
            fracPoint = start;
         else
            fracPoint = fracPoint->next;
      }
      i++;
   }
   return fracPoint;
}
void printList(Node* node) {
   while (node != NULL) {
      cout << node->data << " ";
      node = node->next;
   }
   cout << endl;
}
int main(void) {
   Node* start = getNode(1);
   start->next = getNode(2);
   start->next->next = getNode(3);
   start->next->next->next = getNode(4);
   start->next->next->next->next = getNode(5);
   int k = 2;
   cout << "List is: ";
   printList(start);
   Node* answer = fractionalNodes(start, k);
   cout << "\nFractional node is " << answer->data;
}

輸出

List is: 1 2 3 4 5
Fractional node is 3

更新於:19-Dec-2019

188 次瀏覽

開啟您的 職業

完成課程認證

開始學習
廣告
© . All rights reserved.