心胸决定格局,眼界决定境界...

链表相交问题 反转

http://www.cnblogs.com/BeyondAnyTime/archive/2012/07/06/2580026.html   关于哈希的解决方案:   哈希查找是O(1),通过key索引直接查找是否存在,缺点是无序,无法找到指定范围内的值。

如果哈希的key不是数字索引,通过会通过哈希函数进行运算得到,例如md5,id3等

http://blog.csdn.net/jiqiren007/article/details/6572685  理解链表相交,与之前想的不一样。 为什么从len_max-len_min起步 ?

找出相交的位置:  截取到相同的长度,开始匹配

http://blog.csdn.net/linyunzju/article/details/7753548   理解检测是否有环   ?

一个指针1步,一个指针2步,如果有环,肯定会碰面。

 

反转

非递归方法

链表始终要注意,结尾为NULL

验证过,方法1 

递归方法

 

 

  1. //递归方式  
  2. ListNode * ReverseList2(ListNode * head)  
  3. {  
  4.     //如果链表为空或者链表中只有一个元素  
  5.     if(head==NULL || head->m_pNext==NULL)  
  6.         return head;  
  7.     else  
  8.     {  
  9.        ListNode * newhead=ReverseList2(head->m_pNext);//先反转后面的链表  
  10.        head->m_pNext->m_pNext=head;//再将当前节点设置为其然来后面节点的后续节点  
  11.        head->m_pNext=NULL;  
  12.        return newhead;  
  13.     }  
  14. }  

 

链表建立:

插表头

读入的数据顺序与线性表的逻辑顺序正好相反:         ...->dataN-1->dataN

 

插表尾

 

读入的数据顺序与线性表的逻辑顺序正好相同:  data1 ->data2  ....dataN

 找到链表的第K个元素

K个小链表逐步向前移动,到结尾时,链表头就是需要的值。

K个数组,需要保存K个存储值,而链表表示只需要保存  头和尾。

posted @ 2016-10-09 11:56  WELEN  阅读(162)  评论(0)    收藏  举报