c++单向链表的查找函数请教。

小弟初学数据结构,初步写成了一个数组转移到单向链表并能查找第k个元素的程序,报错而不知错误所在,敬盼指教!
图片描述

#include<iostream>
using namespace std;

class Node  //构造一个名为Node的解构,它具有两个特征属性:数据域,链接域
{
public:
    int data;
    Node *next;
    void create_output(int a[], int n);
};

void create_output(int a[],int n) 
{

    Node *p = NULL;  //用于确定当前节点
    Node *node = NULL;
    Node *head = NULL;  //头节点
    for (int i = 1; i <= n; i++)  //从1到n
    {
    node = new Node;//建立一个归属于Node的对象node
    node->data = a[i - 1];
    if (head == NULL)  //当首节点为空时,即初始状态时,首节点为刚刚建立的新节点
    {
    head = node;
    }
    else  //当首节点不为空时,p的链接域指向node
    p->next = node;
    p = node;  //node为当前节点
    if (i == n)  //完成最后一个节点的建立后,最后一个节点的链接域指向空
    {
    p->next = NULL;
    }
    }                                              //这部分独立出链表的构造函数Node *Create(Node *head)
    //输出链表
    p = head;  //当前结点为首节点
    cout << "数组已导入至链表!" << endl;
    cout << "\n==========所建立链表如下=============\n" << endl;
    while (p != NULL)  //当前节点不为空时,输出其数据域存储的数据
    {
    cout << p->data << "  ";  //还可以构造个for循环显示这是第i个元素
    p = p->next;  //下一个节点为当前节点
    }
    cout << endl;                           //这部分独立出链表的输出函数void Print(Node * head)
};

void search(Node*head, int k)
{
    int i = 0;
    Node *htemp;
    htemp = head;      //保存链表头指针 
    while(i<k)     //找到该结点 
    {
        htemp = htemp->next;
        i++;
    }
    cout<<"查找的元素所包含的数据为:"<<htemp->data;      //返回指向第k个结点的指针 
}

void main()
{
    Node *head=NULL;
    int a[5] = { 1, 2, 3, 4, 5 }, n = 5;
    create_output(a,5);
    search(head, 3);//加入该函数后运行报错,截图见上
}

阅读 4.2k
3 个回答

p->next = node;
p == null,所以没有next

你的main函数中search函数第一个参数head是个空指针,在search函数中使用head->next出错。create函数中也有空指针错误, 语言基础得牢靠才能更好学习数据结构

既然是链表, 就不要用
while(i<k) //找到该结点

{
    htemp = htemp->next;
    i++;
}
这样的方式就会有问题, 必须加上htemp的判空操作.
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题