波波老师,感觉自己还是没有彻底理解链表啊,怎么办?

来源:4-5 从链表中删除元素

qq_山上山_0

2019-05-16

Leetcode206反转链表(视频看了但是题目做不出。。99999)
我的C#代码:(执行超时,肉闷啊:)-_-)

List<ListNode> x_List = new List<ListNode>();
 public ListNode ReverseList(ListNode head)
 {
  if (head == null || head.next == null)
         return head;
     while (head != null)
     {
         this.x_List.Add(head);
         head = head.next;
     }
     if (this.x_List.Count <= 0)
         return null;
     int count = this.x_List.Count;
     ListNode listnode = this.x_List[count - 1];
     for (int i = count - 1; i > 0; i--)
     {
         this.x_List[i].next = this.x_List[i - 1];
     }
     return listnode;
 }

别人的代码(整个不理解,知道是颠倒次序,但就是没彻底搞懂; 为什么没有指向next,新的链表竟然成立??)

  public ListNode ReverseList(ListNode head)
	 {
	     if (head == null)
	         return null;
	     ListNode reverse = null;
	     while (head != null)
	     {
	         ListNode tempStore = head.next; // 将 head 的 下一个对象引用临时存储
	         head.next = reverse;
	         reverse = head;
	         head = tempStore;
	     }
	     return reverse;
	}
写回答

1回答

liuyubobobo

2019-05-16

这个课程没有讲翻转链表的具体实现。在我的《玩转算法面试》中有详细介绍这个过程。


如果你没有购买那个课程,也可以通过github直接看到源码:

C++:https://github.com/liuyubobobo/Play-with-Algorithm-Interview/tree/master/05-About-Linked-List/Course%20Code%20(C%2B%2B)/01-Reverse-Linked-List

Java:https://github.com/liuyubobobo/Play-with-Algorithm-Interview/tree/master/05-About-Linked-List/Course%20Code%20(Java)/01-Reverse-Linked-List/src


我的建议:

1)先将正确的代码翻译成正确的C#代码;

2)用1个节点,2个节点,3个节点,4个节点的测试用例,去跟踪程序,一步一步看,理解每一步,程序中的变量都是在怎么变化的,是怎么一步一步完成反转链表的过程的。

3)在跟踪的过程中,尤其要去体会,每一个变量的意义是什么,每一个变量在做什么事情。


另外,链表的题目做不出来,不意味着没有理解链表;

就像给你一个数组的题目做不出来,不意味着没有理解数组;

给你一个使用栈的题目做不出来,也不意味着不理解栈。


理解一个数据结构,和能灵活运用这个数据结构解决问题,本来就是两回事儿。这门课程侧重于介绍数据结构的底层实现。印象里在课程中介绍过,我不建议学完一个数据机构,就去Leetcode上刷相关数据结构的问题。很有可能你会长时间被某个“难题”卡住,而丧失了信心。但这其实是没必要的。


我还是建议现针对课程中介绍的数据结构的基本操作进行掌握,之后,再解决灵活使用数据结构的问题。


也可以参考我的公众号文章《高效学习的秘密》:https://mp.weixin.qq.com/s?__biz=MzU4NTIxODYwMQ==&mid=2247483836&idx=1&sn=90854aa76507281403e4dd9cd434a12b&chksm=fd8caefacafb27ec78f999fde4f1217c04c6e2ff28cf51fe511d8fa29d484d9281ff91de8c9c&token=1148327592&lang=zh_CN#rd


如果你时间紧,急于应付面试,我推荐直接去学习《玩转算法面试》。(https://coding.imooc.com/class/82.html  )


关于我的算法课程的学习顺序,可以参考这里:https://coding.imooc.com/learn/questiondetail/54345.html


加油!:)

0
3
qq_山上山_0
大爱波波老师
2020-01-06
共3条回复

玩转数据结构

动态数组/栈/队列/链表/BST/堆/线段树/Trie/并查集/AVL/红黑树…

6221 学习 · 1704 问题

查看课程