摘要: 题目: 分别实现反转单向链表和双向链表的函数。 要求: 如果链表长度为N,时间复杂度为O(N),额外空间复杂度要求为O(1)。 程序: 反转单向链表:public class Node{ public Node(int data){ this.value=data; } public int value; public Node next; } public static ... 阅读全文
posted @ 2016-03-07 17:52 小魔仙 阅读(1014) 评论(0) 推荐(0) 编辑
摘要: 题目一: 给定链表的头结点,实现删除链表中间节点的函数。 思路: 基本解法: 先遍历一遍链表,计算出链表节点的个数。然后计算出中间节点的位置,再次遍历链表,找到中间节点的前一个位置,进行删除操作。 但是也可以只遍历一次就完成上述操作: 链表的长度 中间节点 的位置 1 1 2 1 3 2 4 2 5 3 6 3 7 4 8 4 … … 可以看出,链表的长度每增加两个节点,中... 阅读全文
posted @ 2016-03-07 12:56 小魔仙 阅读(377) 评论(0) 推荐(0) 编辑
摘要: 题目: 分别实现两个函数,一个可以删除单链表中倒数第K个节点,另一个可以删除双链表中倒数第K个节点。 要求: 如果链表长度为N,时间复杂度达到O(N),额外空间复杂度达到O(1)。 解答: 让链表从头走到尾,每移动一步,就让K值减一,当链表走到结尾时,如果K值大于0,说明不用调整链表,因为链表根本没有倒数第K个节点,此时将原链表直接返回即可;如果K值等于0,说明链表倒数第K个节点就是头结点,此时直... 阅读全文
posted @ 2016-03-07 11:59 小魔仙 阅读(898) 评论(0) 推荐(0) 编辑
摘要: 题目: 给定两个有序链表的头指针head1和head2,打印两个链表的公共部分。 解答: 因为是有序列表,所以从两个链表的头开始进行如下判断: 如果head1的值小于head2,那么head1向下移动。 如果head1的值大于head2,那么head2向下移动。 如果二者的值相等,则打印这个值,然后head1和head2都向下移动。 head1和head2有任何一个移动到null,整个过程... 阅读全文
posted @ 2016-03-07 11:29 小魔仙 阅读(960) 评论(0) 推荐(0) 编辑