数据结构与算法之链表(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 }

 

posted on 2019-01-22 15:06  Burkut  阅读(620)  评论(0编辑  收藏  举报