空链表添加节点的操作,
甲: 在add_tail_node方法的参数中,形参设置的ListNode* p_head,
添加节点后,最后输出看一下仍是空链表,画图试着分析一下
#includeusing namespace std; struct ListNode { int val; ListNode* next; }; void add_tail_node(ListNode* p_head, int data) { ListNode* new_node = new ListNode(); new_node->val = data; new_node->next = nullptr; if (p_head==nullptr) { p_head = new_node; } else { ListNode* temp = p_head; while (temp->next) { temp = temp->next; } temp->next = new_node; } } void print_list_node(ListNode* node) { while (node != nullptr) { cout << node->val << " "; node = node->next; } cout << endl; } int main() { ListNode* head = nullptr; add_tail_node(head, 5); print_list_node(head); }
1.首先main函数里,ListNode* head = nullptr,这里假设head地址为2^12
2.add_tail_node(head, 5) => add_tail_node(ListNode* p_head, int data)
3. ListNode* new_node = new ListNode()
new_node->val = data
new_node->next = nullptr
4. if (p_head == nullptr) { p_head = new_node}
5.回到main函数,print_list_node(head) => print_list_node(ListNode* node)
空链表,无输出
所以 add_tail_node(ListNode* p_head) 这个参数是有问题的
乙:在add_tail_node方法的参数中,形参设置的指向 ListNode* 的指针 ListNode** p_head,
main函数里的add_tail_node中的实参,传入ListNode* 类型的 head 的地址
#includeusing namespace std; struct ListNode { int val; ListNode* next; }; //ListNode** 指针, 保存 ListNode* 类型地址 //就像int* 指针,保存 int 一样 void add_tail_node(ListNode** p_head, int data) { ListNode* new_node = new ListNode(); new_node->val = data; new_node->next = nullptr; if (*p_head==nullptr) { *p_head = new_node; } else { ListNode* temp = *p_head; while (temp->next) { temp = temp->next; } temp->next = new_node; } } void print_list_node(ListNode* node) { while (node != nullptr) { cout << node->val << " "; node = node->next; } cout << endl; } int main() { ListNode* head = nullptr; add_tail_node(&head, 5); print_list_node(head); }
1. 首先main函数里,ListNode* head = nullptr,这里假设head地址为2^12
2. add_tail_node(&head, 5) => add_tail_node(ListNode** p_head, int data)
ListNode** 保存 ListNode* 类型变量的地址
3. ListNode* new_node = new ListNode()
new_node->val = data
new_node->next = nullptr
4. if (*p_head==nullptr)
{ *p_head = new_node; }
5. 回到main函数,print_list_node(head) => print_list_node(ListNode* node)
打印出5



