请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

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

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 10:26:32

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


如果你没有购买那个课程,也可以通过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 回复 有任何疑惑可以回复我~
  • 提问者 qq_山上山_0 #1
    波波老师,看到您认真的回复,真的很感动;
    说实话,读大学的时候学《数据结构》严蔚敏c语言办的一直没学懂;
    毕业10+年了,还是没懂;直到有一天实在是想把数据结构搞清楚下,看了您的视频,真有种打通任督二脉的赶脚;
    现在真正开始程序开发大概也就3年前吧;很杂c#,js,html等等;但是都不精通;
    现在学习您的视频主要是想培养思维;而且上一次去稍微的一个大厂,结果问的全是c#面向对象的基础(中的基础),结果全是知其然不知其所以然,搞得我真的不爽~~~~感觉大厂面试是不是强调基础理解与运用?
    现在已经是大龄程序员了,感觉肝不动了;但是还是想学习,深入理解相关知识;数据结构也好,面向对象也好;能在实际项目中用到十分之一就很不错了。希望能继续遇到问题向您请教。
    回复 有任何疑惑可以回复我~ 2019-05-16 11:46:14
  • liuyubobobo 回复 提问者 qq_山上山_0 #2
    感觉大厂面试是不是强调基础理解与运用?是的。一方面因为大厂更有可能从底层做事情;另一方面基础确实能很好地反映一个人的能力。对基础掌握透彻的人,通常学框架搞业务是分分钟的事儿,遇到问题也能更好地自己解决:)加油!
    回复 有任何疑惑可以回复我~ 2019-05-16 12:04:33
  • 提问者 qq_山上山_0 #3
    大爱波波老师
    回复 有任何疑惑可以回复我~ 2020-01-06 17:15:20
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信