c++ - 遍历链表插入 STL vector 值

标签 c++ iterator linked-list singly-linked-list

我正在尝试迭代一个 vector 并将数据放入链表节点中...我知道我可以使用 vector 的 STL 迭代器,但是我可以使用什么来循环链表?我不认为我可以使用 STL 列表迭代器,对吗?

List.h

class List {
public:
    List();
    void addNode(int addData);
    void deleteNode(int delData);
    void printList();

private:
    typedef struct Node {
        int data;
        Node* next;
    }* nodePtr;

    nodePtr head;
    nodePtr curr;
    nodePtr temp;
};

List.cpp

List::List() {
    head = NULL;
    curr = NULL;
    temp = NULL;
}

void List::addNode(int addData){
    nodePtr n = new Node;
    n->next = NULL;
    n->data = addData;

    if(head != NULL) {
        curr = head;
        while (curr->next != NULL) {
            curr = curr->next;
        }
        curr->next = n;
    }
    else {
        head = n;
    }
}

void List::deleteNode(int delData) {
    nodePtr delPtr = NULL;
    temp = head;
    curr = head;
    while(curr != NULL && curr->data != delData) {
        temp = curr;
        curr = curr->next;
    }
    if(curr == NULL) {
        cout << delData << " was not in the list.\n";
        delete delPtr;
    }
    else {
        delPtr = curr;
        curr = curr->next;
        temp->next = curr;
        if(delPtr == head) {
            head = head->next;
            temp = NULL;
        }
        delete delPtr;
    }
}

void List::printList() {
    curr = head;
    while(curr !=NULL) {
        cout << curr->data << endl;
        curr= curr->next;
    }
}

main.cpp

#include <cstdlib>
#include <iostream>
#include <string>
#include <sstream>
#include <vector>
#include <iterator>

int main(int argc, char** argv) {
    cout << "Enter some integers, space delimited:\n";
    string someString;
    getline(cin, someString);

    istringstream stringStream( someString );
    vector<int> integers;
    int n;
    while (stringStream >> n)
        List listOfInts;
    listOfInts.addNode(/* stuff in here*/)
    integers.push_back(n);

    return 0;
}

最佳答案

您不需要遍历链表。使用 addNode 将项添加到链表。

vector<int> vec;
...
List list;
for (vector<int>::iterator i = vec.begin(); i != vec.end() ++i)
    list.addNode(*i);

仅此而已。

关于c++ - 遍历链表插入 STL vector 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16381709/

相关文章:

c# - 在 C++ 和 C#/VB.NET 中使用环境变量搜索 ProgramFiles 和 ProgramFiles(x86)

c++ - 在构造函数中调用列表上的迭代器会更改其最终值吗?

c - 使用指针和两个结构数组进行桶排序

c++ - 为什么我的好友类不能访问私有(private)成员?

java - 这段代码具体是做什么的呢?我该如何改变它?

c++ - 如何获得 vector 循环的整数位置

c++ - void* 作为通用引用类型如何工作?

c++ - IMediaSample 时间和 MediaTime

javascript - 在不使用 for...of 的情况下正确使用迭代器

swift - 为什么我不能在我的序列扩展中获得特定于类型的信息?