C++ 中從兩個連結串列中統計對數,使其和等於給定值


給定兩個連結串列,任務是使用連結串列的整數元素形成對,使得它們的和等於給定值,假設為 k。連結串列是由連結連線在一起的資料結構序列。

輸入

vector v_1 = {5, 7, 8, 10, 11},.
vector v_2 = {6, 4, 3, 2, 0} , int k = 11

輸出

Count of pairs from two linked lists whose sum is equal to a given value k are: 4

解釋

The pairs which can be formed using the given linked lists are: (5, 6) = 11(equals to k), (5, 4) = 9(not equals to k), (5, 3) = 8(not equals to k), (5, 2) = 7(not equals to k), (5, 0) = 5(not equals to k), (7, 6) = 13(not equals to k), (7, 4) = 11(equals to k), (7, 3) = 10(not equals to k), (7, 2) = 9(not equals to k), (7, 0) = 7(not equals to k), (8, 6) = 14(not equals to k), (8, 4) = 12(not equals to k), (8, 3) = 11(equals to k), (8, 2) = 10(not equals to k), (8, 0) = 8(not equals to k), (10, 6) = 16(not equals to k), (10, 4) = 14(not equals to k), (10, 3) = 13(not equals to k), (10, 2) = 12(not equals to k), (10, 0) = 10(not equals to k), (11, 6) = 17(not equals to k), (11, 4) = 15(not equals to k), (11, 3) = 14(not equals to k), (11, 2) = 13(not equals to k), (11, 0) = 11(not equals to k). So, clearly there are 3 pairs which are equal to the given sum.

輸入

vector v_1 = {2, 3, 5, 6},.
vector v_2 = {6, 4, 3} , int k = 6

輸出

Count of pairs from two linked lists whose sum is equal to a given value k are: 2

解釋

The pairs which can be formed using the given linked lists are: (2, 6) = 8(not equals to k), (2, 4) = 6(equals to k), (2, 3) = 5(not equals to k), (3, 6) = 9(not equals to k), (3, 4) = 7(not equals to k), (3, 3) = 6(equals to k), (5, 6) = 11(not equals to k), (5, 4) = 9(not equals to k), (5, 3) = 8(not equals to k), (6, 6) = 12(not equals to k), (6, 4) = 10(not equals to k), (6, 3) = 9(not equals to k),. So, clearly there are 2 pairs which are equal to the given sum.

下面程式中使用的方案如下

  • 輸入 k 的值和整數型別的值到兩個向量中,以便我們可以將向量傳遞以形成連結串列。

  • 建立一個函式,該函式將使用作為引數傳遞給函式的向量來建立一個連結串列。

  • 遍歷迴圈直到向量的尺寸,並建立一個類指標物件

    ListNode

    • 遍歷迴圈,直到 ptr->next 不等於 NULL,並將 ptr 設定為 ptr->next

    • 在 ptr->next 中設定 vector[i]

    • 返回開始

  • 建立一個函式,該函式將返回與給定總和匹配的對的數量。

    • 取一個臨時變數 count 並將其設定為 0

    • 建立兩個指標物件,即 *first_list 用於第一個連結串列,*second_list 用於第二個連結串列。

    • 從第一個列表的起始指標開始迴圈,直到列表為空。

    • 在迴圈內,從第二個列表的起始指標開始另一個迴圈,直到列表為空。

    • 在迴圈內,檢查 IF (first_list->data + second_list->data) == k,然後將 count 增加 1。

    • 返回計數

  • 列印結果。

示例

即時演示

#include<bits/stdc++.h>
using namespace std;
class ListNode{
public:
   int data;
   ListNode *next;
   ListNode(int data){
      this->data = data;
      next = NULL;
   }
};
ListNode *CreateList(vector v){
   ListNode *start = new ListNode(v[0]);
   for (int i = 1; i < v.size(); i++){
      ListNode *ptr = start;
      while (ptr->next != NULL){
         ptr = ptr->next;
      }
      ptr->next = new ListNode(v[i]);
   }
   return start;
}
int sum_pair(ListNode *start_1, ListNode *start_2, int k){
   int count = 0;
   ListNode *first_list , *second_list;
   for (first_list = start_1; first_list != NULL; first_list = first_list->next){
      for (second_list = start_2; second_list != NULL; second_list = second_list->next){
         if ((first_list->data + second_list->data) == k){
            count++;
         }
      }
   }
   return count;
}
int main(){
   vector<int> v_1 = {5, 7, 8, 10, 11};
   ListNode* start_1 = CreateList(v_1);
   vector v_2 = {6, 4, 3, 2, 0};
   ListNode* start_2 = CreateList(v_2);
   int k = 11;
   cout<<"Count of pairs from two linked lists whose sum is equal to a given value k are: "<<sum_pair(start_1, start_2, k);
}

輸出

如果我們執行以上程式碼,它將生成以下輸出:

Count of pairs from two linked lists whose sum is equal to a given value k are: 4

更新於: 2020年11月2日

148 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.