空链表添加节点的操作,
甲: 在add_tail_node方法的参数中,形参设置的ListNode* p_head,
添加节点后,最后输出看一下仍是空链表,画图试着分析一下
#include <iostream>
using 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 的地址
#include <iostream>
using 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