【數據結構】鏈表相關內容

1. 寫一個已序鏈表

題意理解:簡單來看也就是說,在鏈表添加節點的時候就將元素添加到合適的位置,使得鏈表總是已序的。

#include <iostream>
using namespace std;

//定義節點的結構體
struct node
{
    int value;                  //節點數值
    struct node * next;         //下一個節點指針
};

//打印鏈表內容
void printnode(node* head)
{
    while (head != NULL)
    {
        cout << head->value << " ";
        head = head->next;
    }
}

//向鏈表中添加一個節點
void addnode(node** head, int value)
{
    node* newnode = new node;               //創建一個新節點,並且將數值填入
    newnode->next = NULL;
    newnode->value = value;
    if (*head == NULL)                      //如果原鏈表爲空,則直接添加到首位置即可
    {
        *head = newnode;                    //鏈表首節點指針修改(這也就是爲什麼使用了二級指針的原因!)
    }
    else
    {
        node* p = *head;
        if (p->value >= value)              //檢查建表首節點是不是比待添加元素大,如是,則直接添加到首位置
        {
            newnode->next = *head;          
            *head = newnode;                //修改鏈表頭節點
        }
        else                                //向後移動找到插入位置的前一個指針
        {
            while (p->next != NULL && (p->next->value) < value)//找到合適的插入位置
                p = p->next;
            newnode->next = p->next;        //修改插入點的下一節點指針
            p->next = newnode;              //修改原鏈表指針
        }
    }
}


int main()
{
    node* mylist = {0};
    int num;
    while (cin >> num)
    {
        addnode(&mylist, num);
        printnode(mylist);
    }
    return 0;
}

問題:

  • 爲什麼添加節點的時候傳入參數寫的是二級指針?
發佈了110 篇原創文章 · 獲贊 125 · 訪問量 34萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章