2.2 Implement an algorithm to find the kth to last element of a singly linked list.

Just using "runner" tech,let the first pointer to run for k step, then start the second pointer, at the same speed.

When the first one hit the end, the second one is just on the kth element.

2.5

(1) input: (7 -> 1 -> 6) + (5 -> 9 -> 2) , that is 617 + 295

 output: (2 -> 1 -> 9), that is 912.

solution: int add = new int[max(linklist1.length,linklist2.length) + 1];

7 -> 1 -> 6

         5 -> 9 -> 2

add:      0,    1,     1,    0
            2 -> 1 -> 9

(2) input: (6 -> 1 -> 7) + (2 -> 9 -> 5),that is 617 + 295

output: (9 -> 1 -> 2)

solution: just add by index, put the number larger than 10 in to array. then add again, until all the number in array is 0.

6 -> 1 -> 7

2 -> 9 -> 5

add: 8 ->10->12   >>=>>  8 -> 0 -> 2

1,    1,     0

9 -> 1 -> 2

2.6

题目:①判断一个单向链表是否有环,如果有环则找到环的入口节点。

②判断两个单向链表是否相交,如果相交则找到交点节点。

算法思想:①用两个指针p1,p2同时指向链表的头部,p1一次移动一步,p2一次移动两步,如果最终p1和p2重合则说明链表有环,如果p2走到空指针(链表的结尾)则说明链表无环。如果最终p1和p2重合,使p2重新指向链表的头结点,然后p1和p2同时一次移动一步,当p1和p2再次重合时该节点指针就是环的入口节点指针。

给定一个有环的链表,写一个算法,找出环的起点。

例如:输入:A->B->C->D->E->C[与前面的C是同一个节点]

输出:C

判断一个链表是否存在环有一个简单的方法:就是使用一个快指针、和一个慢指针,快指针每次走两步,慢指针每次走一步,则如果有环,它们最后必然会相遇的。

本题的难点在于要找出环的起点。其实也不难,与判断是否有环类似,用两个步长分别为1和2的指针遍历链表,直到两者相遇,此时慢指针走过的长度就是环的长度。

另外相遇后把其中指针重新设定为起始点,让两个指针以步长1再走一遍链表,相遇点就是环的起始点。

证明也很简单,证明如下:我们注意到第一次相遇时:慢指针走过的路程S1 = 非环部分长度 + 弧A长,

                            快指针走过的路程S2 = 非环部分长度 + n * 环长 + 弧A长,

                        S1 * 2 = S2,

可得 非环部分长度 = n * 环长 - 弧A长。

让指针A回到起始点后,走过一个非环部分长度,指针B走过了相等的长度,也就是n * 环长 - 弧A长,正好回到环的开头。

②有了第一问的算法基础,应该不难理解第二问。首先将其中一个链表list1首尾相接,变成一个有环链表,如果另一个链表list2和list1相交的话,list2也将成为一个有环链表,并且环的入口节点就是两个链表的交叉节点。如果两个链表不相交,则list2依然是一个无环链表。

2.7 palindrome 首先考虑使用stack来存储,这样极其简洁。

Chp2: Linked List的更多相关文章

  1. [LeetCode] Linked List Random Node 链表随机节点

    Given a singly linked list, return a random node's value from the linked list. Each node must have t ...

  2. [LeetCode] Plus One Linked List 链表加一运算

    Given a non-negative number represented as a singly linked list of digits, plus one to the number. T ...

  3. [LeetCode] Odd Even Linked List 奇偶链表

    Given a singly linked list, group all odd nodes together followed by the even nodes. Please note her ...

  4. [LeetCode] Delete Node in a Linked List 删除链表的节点

    Write a function to delete a node (except the tail) in a singly linked list, given only access to th ...

  5. [LeetCode] Palindrome Linked List 回文链表

    Given a singly linked list, determine if it is a palindrome. Follow up: Could you do it in O(n) time ...

  6. [LeetCode] Reverse Linked List 倒置链表

    Reverse a singly linked list. click to show more hints. Hint: A linked list can be reversed either i ...

  7. [LeetCode] Remove Linked List Elements 移除链表元素

    Remove all elements from a linked list of integers that have value val. Example Given: 1 --> 2 -- ...

  8. [LeetCode] Intersection of Two Linked Lists 求两个链表的交点

    Write a program to find the node at which the intersection of two singly linked lists begins. For ex ...

  9. [LeetCode] Linked List Cycle II 单链表中的环之二

    Given a linked list, return the node where the cycle begins. If there is no cycle, return null. Foll ...

随机推荐

  1. JavaScript之可运行按钮

    看到好多大神都写了像这种在页面"可运行"的Javascript脚本,感觉很好奇,所以我今天也试着写了一个. 自从有了这个"可运行"按钮,好多代码就再也不以图片的 ...

  2. select into 、 insert into select 、create table as select复制表

    Insert是T-sql中常用语句,Insert INTO table(field1,field2,...)  values(value1,value2,...)这种形式的在应用程序开发中必不可少.但 ...

  3. 两种查看eclipse或MyEclipse是64bit还是32bit的方法

    方法一: 对于:eclipse 打开eclipse后:Help-->About Eclipse-->Installation Details-->Configuration 如果看到 ...

  4. 禁用iOS9 App Transport Security(ATS)特性时不起作用

    iOS 9发布后,原来开发的iPad应用在iOS9下面测试时,协议使用的是HTTP,发送网络请求时,Console窗口输出: App Transport Security has blocked a ...

  5. C# 高精度加法 支持小数(待优化)

    直接上代码 实现思路: 1.首先小数点补 位,9223372036854775808.9+9223372036854775808.9223372036854775808 => 922337203 ...

  6. XPath 初步讲解

    2016-05-05 XPath是JavaScript 中节点查找手段,ie9以后的版本才支持w3c标准,其他浏览器基本支持.在e8之前的浏览器,通过基于 activeX的xml dom对象实现. 为 ...

  7. QT编译mysql驱动

    一. 下载mysql C链接库 地址:http://dev.mysql.com/downloads/ 根据当前系统选择下载: 二. 安装下载好的mysql驱动文件 注意,一定要安装在不含有中文.空格以 ...

  8. iOS 非ARC基本内存管理系列 -手把手教你ARC——iOS/Mac开发ARC入门和使用(转)

    手把手教你ARC——iOS/Mac开发ARC入门和使用 Revolution of Objective-c 本文部分实例取自iOS 5 Toturail一书中关于ARC的教程和公开内容,仅用于技术交流 ...

  9. ubuntu启动慢

    http://blog.sina.com.cn/s/blog_4cc9ffbc0100rxhh.html 参考 笔记本装的是ubuntu12.04,最近发现开机启动特别慢,至少3分钟,总担心系统会启动 ...

  10. L1范式和L2范式的区别

    L1 and L2 regularization add a cost to high valued weights to prevent overfitting. L1 regularization ...