1. 写一个已序链表
题意理解:简单来看也就是说,在链表添加节点的时候就将元素添加到合适的位置,使得链表总是已序的。
@H_403_10@#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; }
问题:
- 为什么添加节点的时候传入参数写的是二级指针?