数据结构与算法之链表(LinkedList)——简单实现
这一定要mark一下。虽然链表的实现很简单,且本次只实现了一个方法。但关键的是例子:单向链表的反转。这是当年我去H公司面试时,面试官出的的题目,而当时竟然卡壳了。现在回想起来,还是自己的基本功不扎实,代码写的太少。所以现在趁闲暇之余,补课补起来。
1 class _LinkedListEntry<E> { 2 E element; 3 _LinkedListEntry next; 4 5 _LinkedListEntry(this.element); 6 7 String toString() => element.toString(); 8 } 9 10 class LinkedList<E> { 11 _LinkedListEntry<E> head; 12 13 void add(E element) { 14 var entry = _LinkedListEntry(element); 15 entry.next = head; 16 head = entry; 17 } 18 } 19 20 21 void main() { 22 var ll = LinkedList<String>(); 23 ll..add('java')..add('dart')..add('go')..add('c'); 24 for (var ptr = ll.head; ptr != null; ptr = ptr.next) print(ptr); 25 26 print('----------------'); 27 var reversed = reverse(ll); 28 for (var ptr = reversed.head; ptr != null; ptr = ptr.next) print(ptr); 29 } 30 31 LinkedList<E> reverse<E>(LinkedList<E> ll) { 32 var reversed = LinkedList<E>(); 33 var a = ll.head; 34 while (a != null) { 35 var t = a.next; 36 a.next = reversed.head; 37 reversed.head = a; 38 a = t; 39 } 40 return reversed; 41 }
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步