m0_74071629 2023-03-22 15:54 采纳率: 100%
浏览 30
已结题

连接两个单链表并输出

想创建两个单链表A,B,并创建新的单链表C,将A,B接起来
想输出单链表C检查,显示读取访问权限冲突
请求帮助,万分感谢!

#include<iostream>
using namespace std;
template<class T>
struct Node
{
    T data; //数据域
    struct Node<T>* next; // 指针域,在这里<T>可省略
};

template<class T>
class LinkList
{
public:
    LinkList() { front = new Node<T>; front->next = NULL; }     
        LinkList(T a[], int n);
    ~LinkList();
    Node<T>* Get(int i); //用于找到元素位置
    void Insert(int i, Node<T>* m);//在线性表的第i个位置上插入值为x的新元素
    void Show(Node<T>*head);
private:
    Node<T>* front;//头指针
};
template<class T>
LinkList<T>::LinkList(T a[], int n)//使用尾插法
{
    front = new Node<T>;
    Node<T>* r = front;
    for (int i = 0; i < n; i++)
    {
        Node<T>* s = new Node<T>;
        s->data = a[i];
        r->next = s;
        r = s;
    }
    r->next = NULL;
}
template<class T>
LinkList<T>::~LinkList()
{
    delete[]front;
}
template<class T>
Node<T>* LinkList<T>::Get(int i) //获取线性表第i个位置上的元素
{
    Node<T>* p = front->next; 
    int j = 1;
    while (p && j != i)
    {
        p = p->next;
        j++;
    }
    return p;
}
template<class T>
void LinkList<T>::Insert(int i, Node<T>* m)
{
    Node<T>* p = front;
    if (i != 1)
        p = Get(i - 1);
    if (p)
    {
        p->next = m;//在C/A的最后一个元素next传入A/B第一个元素的位置
    }
}
//遍历输出函数
template<class T>
void LinkList<T>::Show(Node<T>* t)
{
    Node<T>* p = t;
    while (p->next != NULL)
    {
        cout << "try"<< p->next->data;
        p = p->next;
    }
}

int main()
{
    const int n = 10;
    int A[n] = { 1,2,3,4,5,6,7,8,9,10 };
    int B[n] = { 9,8,7,6,5,4,3,2,1,0 };
    LinkList<int>LLA(A, n);
    LinkList<int>LLB(B, n);
    Node<int>* A10_next = LLA.Get(0);
    Node<int>* B1_next = LLB.Get(0);
    LinkList<int> LLC;
    LLC.Insert(0, A10_next);
    LLC.Insert(10, B1_next);
    LLC.Show(LLC.Get(0));
}

  • 写回答

2条回答 默认 最新

  • 快乐鹦鹉 2023-03-22 16:02
    关注
    
     if (i != 1)
            p = Get(i - 1);
    

    insert函数有问题啊,如果i是0,岂不是Get(-1)了?
    给改好了

    #include<iostream>
    using namespace std;
    template<class T>
    struct Node
    {
        T data; //数据域
        struct Node<T>* next; // 指针域,在这里<T>可省略
    };
     
    template<class T>
    class LinkList
    {
    public:
        LinkList() { front = new Node<T>; front->next = NULL; }     
            LinkList(T a[], int n);
        ~LinkList();
        Node<T>* Get(int i); //用于找到元素位置
        void Insert(int i, Node<T>* m);//在线性表的第i个位置上插入值为x的新元素
        void Show(Node<T>*head);
    private:
        Node<T>* front;//头指针
    };
    template<class T>
    LinkList<T>::LinkList(T a[], int n)//使用尾插法
    {
        front = new Node<T>;
        Node<T>* r = front;
        for (int i = 0; i < n; i++)
        {
            Node<T>* s = new Node<T>;
            s->data = a[i];
            r->next = s;
            r = s;
        }
        r->next = NULL;
    }
    template<class T>
    LinkList<T>::~LinkList()
    {
        delete[]front;
    }
    template<class T>
    Node<T>* LinkList<T>::Get(int i) //获取线性表第i个位置上的元素
    {
        Node<T>* p = front->next; 
        int j = 1;
        while (p && j != i)
        {
            p = p->next;
            j++;
        }
        return p;
    }
    template<class T>
    void LinkList<T>::Insert(int i, Node<T>* m)
    {
        Node<T>* p = front;
        if (i != 1)
            p = Get(i - 1);
        if (p)
        {
            p->next = m;//在C/A的最后一个元素next传入A/B第一个元素的位置
        }
    }
    //遍历输出函数
    template<class T>
    void LinkList<T>::Show(Node<T>* t)
    {
        Node<T>* p = t;
        while (p != NULL)
        {
            cout << "try"<< p->data<<" ";
            p = p->next;
        }
    }
     
    int main()
    {
        const int n = 10;
        int A[n] = { 1,2,3,4,5,6,7,8,9,10 };
        int B[n] = { 9,8,7,6,5,4,3,2,1,0 };
        LinkList<int>LLA(A, n);
        LinkList<int>LLB(B, n);
        Node<int>* A10_next = LLA.Get(1);
        Node<int>* B1_next = LLB.Get(1);
        LinkList<int> LLC;
        LLC.Insert(1, A10_next);
        LLC.Insert(11, B1_next);
        LLC.Show(LLC.Get(1));
        system("pause");
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月30日
  • 已采纳回答 3月22日
  • 创建了问题 3月22日

悬赏问题

  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测