单端链表和leetcode206题

一、链表是什么?

1.链表是一种存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表的指针地址实现的。

2.链表包括了两部分:

(1)存储数据

(2)指向下一个节点的指针
单端链表

二、链表的作用

因为链表的特殊结构,元素与元素之间的插入和删除时间复杂度为O(1)。

比如图中,想要删除元素2,只需将元素1的next指针直接指向3,并断开元素2指向元素3的next指针即可。

链表删除

同样,如果需要在元素1和元素2之间插入一个新元素,只需要断开元素1和元素2之间的next指针,将元素1的next指针指向元素4,并将元素4的next指针指向元素2即可。

链表插入

而链表的访问与搜索的时间复杂度则为O(n),比如一串链表中元素分别为1、2、3,若想要访问元素3,则需要先从头节点,也就是元素1开始,通过元素1的next指针访问到元素2,再通过元素2的next指针访问到元素3。同理,搜索一个元素在最坏情况下,需要遍历整个链表,所以访问与搜索的时间复杂度为O(n)。

三、单端链表练习题

206、反转链表

反转链表题目

解题思路:

创建2个指针cur和pre,两个指针同时后移,每后移一次反转局部next指针的指向,直到pre指针为NULL。

第一步,创建指针。pre在前,cur在后。

创建指针

第二步,创建临时指针,用来保存pre断开连接的地址。

创建临时指针t

第三步,局部next指针反转。临时指针t在此时发挥作用,保存pre的next指针断开与元素2的连接后的地址。

局部指针反转

第四步,cur与pre后移,同时在进入新循环后临时指针t后移。

指针后移

第五步,重复上述动作。

重复

代码如下

class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        ListNode* cur = new ListNode;
        cur = NULL;
        ListNode* pre = new ListNode;
        pre = head;
        while(pre != NULL){
            ListNode* t = pre->next;
            pre->next = cur;
            cur = pre;
            pre = t;
        }
        return cur;
    }
};

以上仅仅为链表中的单端链表,且仅为简单应用。中间过程如果出错烦请提醒!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值