【1】5. 头插法 尾插法 建立单链表代码分析

=>  分为 头插法 和 尾插法

 

 

步骤:(带头结点情况)

1. 初始化一个单链表
2. 每次取一个数据元素,插入到表尾/表头

 

 

有了一个单链表之后,接下来我们每次取一个数据元素插入到这个单链表的尾部,这个操作可以用之前实现的按位序插入这个基本操作来实现。

https://blog.csdn.net/pikaqiu_JBR99/article/details/107593731

 

 

尾插法建立单链表:

初始化单链表

设置变量 length 记录链表长度

while 循环 {
    每次取一个数据元素 e;
    ListInsert(L,length+1,e)插到数据尾部;
    lenth++;
}
每次这都是从头开始之后遍历,时间复杂度为 O(n^2)。

 

 

 

其实没有必要每次都从头开始寻找,可以设置一个表尾指针r,当要在尾部插

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以帮你解答这个问题。 首先,让我们了解一下尾插法建立单链表的思路: 1. 定义一个头指针和一个尾指针,初始时它们都指向头结点; 2. 定义一个新结点,输入数据; 3. 将新结点插入到尾结点之后,并将尾指针指向新结点; 4. 重复步骤2和3,直到输入完所有数据。 接下来,我们来看一下头插法完成单链表的逆置并输出逆置后的单链表的思路: 1. 定义一个新链表的头结点,并初始化为空; 2. 从原链表的头结点开始,依次取出每个节点,将其插入到新链表的头结点之后; 3. 重复步骤2,直到原链表中的所有节点都被取出并插入到新链表中; 4. 输出新链表的所有节点。 下面是C++代码实现尾插法建立单链表头插法完成单链表的逆置并输出逆置后的单链表: ```c++ #include <iostream> using namespace std; struct ListNode { int val; ListNode* next; ListNode(int x): val(x), next(nullptr) {} }; ListNode* createList() { ListNode* head = new ListNode(0); ListNode* tail = head; int x; while (cin >> x) { ListNode* p = new ListNode(x); tail->next = p; tail = p; } return head->next; } ListNode* reverseList(ListNode* head) { ListNode* newHead = nullptr; while (head) { ListNode* p = head; head = head->next; p->next = newHead; newHead = p; } return newHead; } void printList(ListNode* head) { while (head) { cout << head->val << " "; head = head->next; } cout << endl; } int main() { ListNode* head = createList(); head = reverseList(head); printList(head); return 0; } ``` 希望能够帮到你!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值