首页 > 解决方案 > C++ 中的单链表

问题描述

我有将项目添加到链表并打印它们的源代码。现在“print()”函数从头到尾打印项目。有2个问题:1.“99”是链表中的第一项吗?2.如果“11”是链表中的第一项,我如何设置链表的起始位置从第一个打印?

#include <iostream>

using namespace std;

class Node
{
    public:
        int data;
        Node *next;
};

Node *head = NULL;
int *start = &head->data; // Get start of linked list

void insert(int data)
{
    Node *new_node = new Node();
    new_node->data = data;
    new_node->next = head;
    head = new_node;
}

void display()
{
    Node *ptr;
    ptr = head;
    while (ptr != NULL)
    {
        cout<< ptr->data << " ";
        ptr = ptr->next;
    }
}

int main()
{
    for (int i = 11; i <= 100; i += 10)
        insert(i);
    cout<< "Setting head->data address...";
    &head->data = start;
    cout<< "[ OK ]\n";
    cout<< "The linked list is: ";
    display();
    cout<< endl;

    return 0;
}

标签: c++

解决方案


1) 如果for插入元素的那个循环真的应该以 结束i += 11,那么是的,99是列表中的第一个元素。

2) 列表如下所示99 -> 88 -> ... -> 22 -> 11。没有办法从11to 22,你只能在一个方向遍历列表。这是list数据结构的一个特点。

如果您需要以与插入元素相同的顺序打印元素,则需要在列表的末尾插入,而不是在前面。因为这head还不够,您需要另一个指向列表的指针,一个指向末尾的指针,我们称之为tail. insert()然后将以与现在tail使用的方式大致相同的方式使用head(它根本不会接触或改变head)。


推荐阅读