DS單連結串列--類實現(未完成)

夜闌優琿發表於2020-11-14

題目:

問題 A: DS單連結串列--類實現
時間限制: 1 Sec  記憶體限制: 128 MB
提交: 1057  解決: 405
[提交][狀態][討論版]
題目描述
用C++語言和類實現單連結串列,含頭結點

屬性包括:data資料域、next指標域

操作包括:插入、刪除、查詢

注意:單連結串列不是陣列,所以位置從1開始對應首結點,頭結點不放資料

類定義參考

在這裡插入圖片描述

輸入
n
第1行先輸入n表示有n個資料,接著輸入n個資料
第2行輸入要插入的位置和新資料
第3行輸入要插入的位置和新資料
第4行輸入要刪除的位置
第5行輸入要刪除的位置
第6行輸入要查詢的位置
第7行輸入要查詢的位置
輸出
n
資料之間用空格隔開,

第1行輸出建立後的單連結串列的資料

每成功執行一次操作(插入或刪除),輸出執行後的單連結串列資料

每成功執行一次查詢,輸出查詢到的資料

如果執行操作失敗(包括插入、刪除、查詢等失敗),輸出字串error,不必輸出單連結串列

樣例輸入
6 11 22 33 44 55 66
3 777
1 888
1
11
0
5
樣例輸出
11 22 33 44 55 66 
11 22 777 33 44 55 66 
888 11 22 777 33 44 55 66 
11 22 777 33 44 55 66 
error
error
44

程式碼塊:

#include <iostream>
using namespace std;

class ListNode
{
public:
    int data;
    ListNode *next;
    ListNode()
    {
        next = NULL;
    }
};

class LinkList
{
public:
    ListNode *head;
    int len;
    LinkList();
    ~LinkList();
    ListNode * LL_index(int i);
    int LL_get(int i);
    int LL_insert(int i, int item);
    int LL_del(int i);
    void LL_display();
    void CreatList(int n);
};

LinkList::LinkList()
{
    head = new ListNode();
    len = 0;
}

LinkList::~LinkList()
{
    ListNode *p, *q;
    p = head;
    while(p!=NULL)
    {
        q = p;
        p = p->next;
        delete q;
    }
    len = 0;
    head = NULL;
}

void LinkList::LL_display()
{
    ListNode *p;
    p = head->next;
    while(p)
    {
        cout<<p->data<<' ';
        p = p->next;
    }
    cout<<endl;
}

int LinkList::LL_get(int i)
{
    if(i>len||i<1)
    {
        cout<<"error"<<endl;
        return -1;
    }
    ListNode *p;
    p = head;
    while(i--)
    {
        p = p->next;
    }
    cout<<p->data<<endl;
    return 0;
}

ListNode * LinkList::LL_index(int i)
{
    ListNode *p;
    p = head;
    while(i--)
    {
        p = p->next;
    }
    return p;
}

int LinkList::LL_insert(int i, int item)
{
    if(i>len||i<1)
    {
        cout<<"error"<<endl;
        return -1;
    }
    ListNode *p;
    p = LL_index(i-1);
    ListNode *q;
    q = new ListNode;
    q->data = item;
    q->next = p->next;
    p->next = q;
    len++;
    LL_display();
    return 0;
}

int LinkList::LL_del(int i)
{
    if(NULL==head->next||i>len||i<1)
    {
        cout<<"error"<<endl;
        return -1;
    }
    ListNode *p;
    p = LL_index(i-1);
    ListNode *q;
    q = p->next;
    p->next = q->next;
    delete q;
    q = NULL;
    len--;
    LL_display();
    return 0;
}

void LinkList::CreatList(int n)
{
    ListNode *p;
    ListNode *q;
    q = head;
    while(n--)
    {
        p = new ListNode;
        cin>>p->data;
        q->next = p;
        q = q->next;
        len++;
    }
    LL_display();
}

int main(void)
{
    LinkList L;
    int n;
    cin>>n;
    L.CreatList(n);
    int i, item;
    cin>>i>>item;
    L.LL_insert(i, item);
    cin>>i>>item;
    L.LL_insert(i, item);
    cin>>i;
    L.LL_del(i);
    cin>>i;
    L.LL_del(i);
    cin>>i;
    L.LL_get(i);
    cin>>i;
    L.LL_get(i);
    return 0;
}

相關文章