波波老师,感觉自己还是没有彻底理解链表啊,怎么办?
来源: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回答
- 
				
				这个课程没有讲翻转链表的具体实现。在我的《玩转算法面试》中有详细介绍这个过程。 如果你没有购买那个课程,也可以通过github直接看到源码: 我的建议: 1)先将正确的代码翻译成正确的C#代码; 2)用1个节点,2个节点,3个节点,4个节点的测试用例,去跟踪程序,一步一步看,理解每一步,程序中的变量都是在怎么变化的,是怎么一步一步完成反转链表的过程的。 3)在跟踪的过程中,尤其要去体会,每一个变量的意义是什么,每一个变量在做什么事情。 另外,链表的题目做不出来,不意味着没有理解链表; 就像给你一个数组的题目做不出来,不意味着没有理解数组; 给你一个使用栈的题目做不出来,也不意味着不理解栈。 理解一个数据结构,和能灵活运用这个数据结构解决问题,本来就是两回事儿。这门课程侧重于介绍数据结构的底层实现。印象里在课程中介绍过,我不建议学完一个数据机构,就去Leetcode上刷相关数据结构的问题。很有可能你会长时间被某个“难题”卡住,而丧失了信心。但这其实是没必要的。 我还是建议现针对课程中介绍的数据结构的基本操作进行掌握,之后,再解决灵活使用数据结构的问题。 如果你时间紧,急于应付面试,我推荐直接去学习《玩转算法面试》。(https://coding.imooc.com/class/82.html ) 关于我的算法课程的学习顺序,可以参考这里:https://coding.imooc.com/learn/questiondetail/54345.html 加油!:) 032020-01-06
相似问题
