链表访问结点效率低。上节提到,数组可以在 \(O(1)\) 时间下访问任意元素,但链表无法直接访问任意结点。这是因为计算机需要从头结点出发,一个一个地向后遍历到目标结点。例如,倘若想要访问链表索引为 index (即第 index + 1 个)的结点,那么需要 index 次访问操作。
linked_list.java
/* 访问链表中索引为 index 的结点 */ListNodeaccess(ListNodehead,intindex){for(inti=0;i<index;i++){if(head==null)returnnull;head=head.next;}returnhead;}
linked_list.cpp
/* 访问链表中索引为 index 的结点 */ListNode*access(ListNode*head,intindex){for(inti=0;i<index;i++){if(head==nullptr)returnnullptr;head=head->next;}returnhead;}
linked_list.py
defaccess(head:ListNode,index:int)->Optional[ListNode]:""" 访问链表中索引为 index 的结点 """for_inrange(index):ifnothead:returnNonehead=head.nextreturnhead
linked_list.go
/* 访问链表中索引为 index 的结点 */funcaccess(head*ListNode,indexint)*ListNode{fori:=0;i<index;i++{ifhead==nil{returnnil}head=head.Next}returnhead}
linked_list.js
/* 访问链表中索引为 index 的结点 */functionaccess(head,index){for(leti=0;i<index;i++){if(!head){returnnull;}head=head.next;}returnhead;}
linked_list.ts
/* 访问链表中索引为 index 的结点 */functionaccess(head:ListNode|null,index:number):ListNode|null{for(leti=0;i<index;i++){if(!head){returnnull;}head=head.next;}returnhead;}
linked_list.c
[class]{}-[func]{access}
linked_list.cs
/* 访问链表中索引为 index 的结点 */ListNode?access(ListNodehead,intindex){for(inti=0;i<index;i++){if(head==null)returnnull;head=head.next;}returnhead;}
linked_list.swift
/* 访问链表中索引为 index 的结点 */funcaccess(head:ListNode,index:Int)->ListNode?{varhead:ListNode?=headfor_in0..<index{ifhead==nil{returnnil}head=head?.next}returnhead}
linked_list.zig
// 访问链表中索引为 index 的结点fnaccess(node:?*inc.ListNode(i32),index:i32)?*inc.ListNode(i32){varhead=node;vari:i32=0;while(i<index):(i+=1){head=head.?.next;if(head==null)returnnull;}returnhead;}