链表 算法
创始人
2025-05-30 05:28:37

# 链表
    1: C++ 使用的链表的数据结构
         ListNode* head
            head->val : 值域
            head->next: 指针域


    2: 链表创建哑节点
        ListNode* dummy = new ListNode(-1);


    3: 链表中创建一个游标去遍历链表元素
        ListNode* cur = head; // 先指向当前链表的头节点
        cur = cur->next; // 游标移动
        遍历结束条件是非空: while(cur) {}


    4: 删除链表操作 node->val = 0; node->next = nullptr; free(node);


    5: 打印链表元素
        从头到尾打印链表元素: 遍历链表每个节点,找个数组存放每个节点数据。之后打印数组元素。
        从尾到头打印链表元素: 从尾到头,栈先进后出。 遍历链表,找个栈存放节点数据,之后打印栈元素。


    6: 环
         约瑟夫环: cur指向头节点,找到目标节点后,删除节点。更新新的头节点head,cur重新指向新的头节点。
         链表是否带环
            (1) 使用快慢指针,当快慢指针相遇时候就说明有
         链表环的入口
            (1) 使用快慢指针,当两者相遇。 一个重新开始一步步走,一个从相遇点开始走,当再次相遇就为环的入口。


    7: 链表反转问题 (需要一个pre 前驱节点)
        模版
ListNode* reverse_listnode(ListNode* pre, ListNode* tail)
{
    // 注意这种方法 要求pre 不能为空 pre = dummy 
    // 参数为前驱 和 后继
    // pre不动
    ListNode* cur_pre = pre; // cur_pre为移动的pre
    ListNode* cur = cur_pre->next; // cur 指向当前等待翻转的第一个元素

    // 翻转
    ListNode* tmp = nullptr;
    while (cur != tail) {
        tmp = cur->next; // 存放下个节点
        cur->next = cur_pre; // 修改指向
        cur_pre = cur; // 当前前驱
        cur = tmp; // 移动到下个待翻转的节点
    }

    // 翻转后的结果
    ListNode* new_tail = pre->next; // 新的尾
    new_tail->next = tail; // 新的尾指向当前cur (或者写为 pre->next->next = tail) 当前cur 指向了当前后驱tail
    ListNode* new_head = cur_pre;  // 新的头
    pre->next = new_head; // 前驱指向新的头

    return new_tail; // 返回新的尾部
    // return new_head; // 返回新的头部
}


    8: 链表双指针问题(快慢指针问题: (1)求是否为环, (2)求环的起点, (3)求倒数第k个节点) (4)链表的中间节点
        模版

case 1/2:
// 快慢指针从相同的起点开始,每次快都是慢的2倍。(每次多走一步)
// 结束遍历条件是快指针结束, 指向nullptr.
ListNode* slow = head;
ListNode* fast = head;
while (fast != nullptr) { // 快指针还没有结束
    slow = slow->next;
    fast = fast->next;
    if (fast->next != nullptr) {
        fast = fast->next; // 快指针多走一步
    } else {
        // (1) return false; // 不是环
        // (2) return nullptr; // 不是环 找不到环的起点
    }

    // 快慢指针两者相遇
    if (fast == slow){
        // (1)return true; // 是环
        // (2)求环的起点
        while (cur != slow) {
            slow = slow->next;
            cur = cur->next;
        }
        return slow; // 返回环的起点
    } 
}

case 3
// 快指针先领先慢指针k步。之后两者一起移动。
// 遍历结束条件是快指针结束,指向nullptr
ListNode* slow = head;
ListNode* fast = head;
int i = 0;
while (i < k) {
    fast = fast->next
    i++;
    if (i != k && fast == nullptr) {
        return slow; // 没有移动完 就遍历结束 所以不存在倒数第个节点
    } else if (i == k && fast == nullptr) {
       return slow->next; // 头节点就是倒数第k个节点 之后返回头节点的下一个节点,实现删除目标节点
    }
    // 继续
}
ListNode* pre = nullptr;
while(fast) { //fast
    pre = slow;
    slow = slow->next;
    fast = fast->next;
}
pre->next = slow->next; //实现删除slow

case 4 (当都指向head 那么就是偶数中心的后者)(都指向pre 就是指向中心的前者)
ListNode* slow = head;
ListNode* fast = head;
while (fast != nullptr && fast->next != nullptr) {
    slow = slow->next;
    fast = fast->next->next;
}
return slow; // 返回中间节点

链表leetcode:
(1) 反转链表
https://leetcode.cn/problems/reverse-linked-list/

(2) 反转链表
https://leetcode.cn/problems/reverse-linked-list-ii/

(3) 两两交换链表中的节点
https://leetcode.cn/problems/swap-nodes-in-pairs/

(4) k个一组交换链表节点
https://leetcode.cn/problems/reverse-nodes-in-k-group/

(5) 回文链表
https://leetcode.cn/problems/palindrome-linked-list/
 

相关内容

热门资讯

一边离谱宣传一边大规模召回,美... 近日,美的在海外市场召回170万台空调引发关注。据多家美国媒体报道,6月5日,美的宣布召回在美国和加...
【美股】美股三大股指全线收涨,... 美东时间10日,美国三大股指全线收涨,纳指、标普500指数续创2月底以来收盘新高,道指创3月初以来收...
全球智能影像第一股上市,“芯片... 6月11日,有一只新股申购,为创业板的新恒汇(301678.SZ);另有一只新股上市,为科创板的影石...
大悦城:关于公司董事辞职的公告 证券代码:000031 证券简称:大悦城 公告编号:2025-035 大悦城控股集团股份有限公司 关...
2.5天休假模式来要了?提升人... 本文来自微信公众号:盖雅普森,作者:盖雅普森继四川绵阳5 月 24 号当地商务局发布文件,明明白白鼓...
我国首个再生金属品种铸造铝合金... 10日,上海期货交易所铸造铝合金期货及期权挂牌交易,标志着我国期货市场迎来首个再生金属品种,其中,铸...
美股三大股指全线收涨 “稳定币...   中新经纬6月11电 美东时间周二(10日),美国三大股指全线收涨,纳指、标普500指数续创2月底...
持续推荐创新药;2~3季度银行... |2025年6月10日 星期二| NO.1国泰海通证券:持续推荐创新药 国泰海通证券研报表示,近期B...
中国有色金属工业协会党委书记、... 尊敬的各位领导,同志们: 上午好! 很高兴与大家共同见证上期所首个再生金属产品—铸造铝合金期货及期权...
万亿级健康险 能否助险企突破增... 三季度保险预定利率下调时点渐近,保险公司的产品结构调整也像是上了发条——为了防止利率调降后的产品失色...
中石化LNG接收站“双船同靠”... 天津北方网讯:10日,中国石化天然气分公司天津LNG接收站,同时接卸两艘运输船。 今天上午,随着来自...
6月10日新股提示:华之杰申购... 据交易所公告,华之杰今日申购,申购代码:732400,发行价格:19.88元/股,单一账户申购上限8...
铝产业链集齐“期货三兄弟” 直... 经中国证监会同意,铸造铝合金期货、铸造铝合金期权今天9时、21时先后在上海期货交易所挂牌交易。这意味...
“吃药行情”上演:国产GLP-... 6月9日,“吃药行情”上演,医药板块强势上涨,化学制品、医疗服务、生物制品、中药、医药商业多个板块联...
再生元信仰破灭 再生元信仰破灭... 本文来自微信公众号:氨基观察,作者:武月2024年8月27日,再生元股价创历史新高,1332亿美元市...
“始祖鸟平替”冲击港股上市,欲... 撰文|H.H 编辑|杨勇 来源 | 氢消费出品 ID | HQingXiaoFei 打着“始祖鸟平替...
粤开证券董事会换届 新董事长人... 21世纪经济报道记者 易妍君 广州报道6月10日晚间,粤开证券发布公司董事会换届公告,披露了新一届董...
四度IPO折戟后喜马拉雅200... 腾讯音乐拟收购喜马拉雅的传闻终于落地。6月10日晚,腾讯音乐娱乐集团(TME)发布公告称,与喜马拉雅...
三次交表 曹操出行终于通过港交... 历时十四个月,经历三次交表,曹操出行终于在6月10日通过了香港交易及结算所有限公司(以下简称“港交所...
ST龙宇:退市整理期拟回购50... 【ST龙宇退市整理期拟回购股份,上交所提出多项要求】6月9日,即将进入退市整理期的ST龙宇(6030...
久立特材连跌4天,广发基金旗下... 6月10日,久立特材连续4个交易日下跌,区间累计跌幅-2.77%。浙江久立特材科技股份有限公司是一家...
听了父亲的劝,马斯克浪子回头,... 经过老父亲一番透彻的劝告,马斯克浪子回头,一改桀骜不驯,对特朗普的“圣旨”又是转发,又是点赞,疯狂地...
奇瑞入主鸿合科技?教育信息化龙... 6月10日晚间,鸿合科技(002955.SZ)公告称,公司实际控制人XINGXIUQING、邢正正在...
腾讯音乐下重注!28亿美元全资... 出品|达摩财经6月10日,腾讯音乐(1698.HK)发布公告表示,公司与在线音频平台喜马拉雅控股及其...
A股午后跳水,科技股领跌 a股... 6月10日,A股市场上午呈现低位震荡态势,午后一度出现急跳水,但随后迅速展开V型反弹,跌幅收缩。当日...
白银狂飙,价格创13年新高!6... 本文来源:时代周报 作者:王苗苗 图源:图虫创意白银在近期强势上涨至近13年高位,自2012年3月...
“涨工资”要来了?国家重磅发文... 扩内需、促消费是当前政策的重点方向,而增加居民收入是提振消费的关键举措。近日,中共中央办公厅、国务院...
比亚迪吉利长城:“口水仗”背后... 出品丨虎嗅汽车组作者丨李赓头图丨视觉中国中国汽车行业中的火药味,悄然达到了一个新的高度。最直接的原因...
000016突发公告,终止收购... 2025.06.10本文字数:990,阅读时长大约2分钟6月10日,康佳集团股份有限公司(简称深康佳...
马上消费再发ABS,2024年... 蓝鲸新闻6月10日讯(记者 金磊 朱荻)6月10日,中国货币网披露,马上消费金融拟发行“安逸花”20...