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;
}
問題:
- 爲什麼添加節點的時候傳入參數寫的是二級指針?