linked

LintCode 223: Palindrome Linked List

戏子无情 提交于 2020-02-04 15:12:27
Palindrome Linked List Implement a function to check if a linked list is a palindrome. Example Example 1: Input: 1->2->1 output: true Example 2: Input: 2->2->1 output: false Challenge Could you do it in O(n) time and O(1) space? 解法1: 我用的stack。 注意: 1)奇数和偶数,midIndex都是len/2 - 1。 但奇数的midIndex要从midIndex后面2个开始。 2) 求链表的中点也可以用快慢指针法。 代码如下: /** * Definition of singly-linked-list: * class ListNode { * public: * int val; * ListNode *next; * ListNode(int val) { * this->val = val; * this->next = NULL; * } * } */ class Solution { public : /** * @param head: A ListNode. * @return: A boolean. */ bool

35. Reverse Linked List

元气小坏坏 提交于 2020-01-29 02:41:25
35. Reverse Linked List Description: Reverse a linked list. Example Example 1: Input: 1->2->3->null Output: 3->2->1->null Example 2: Input: 1->2->3->4->null Output: 4->3->2->1->null Challenge Reverse it in-place and in one-pass Main Idea: Fundamental linked list problem. Code: /** * Definition of singly-linked-list: * * class ListNode { * public: * int val; * ListNode *next; * ListNode(int val) { * this->val = val; * this->next = NULL; * } * } */ class Solution { public : /** * @param head: n * @return: The new head of reversed linked list. */ ListNode * reverse ( ListNode * head ) { // write

LeetCode 141 Linked List Cycle(set、map、快慢指针)

大城市里の小女人 提交于 2020-01-28 15:25:28
题目链接: 点击这里 不带头节点。 set判重: /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public : bool hasCycle ( ListNode * head ) { unordered_set < ListNode * > st ; while ( head != NULL ) { if ( st . count ( head ) ) return true ; st . insert ( head ) ; head = head - > next ; } return false ; } } ; map: /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public : bool hasCycle ( ListNode * head )

160. Intersection of Two Linked Lists

最后都变了- 提交于 2020-01-25 01:10:22
160. 相交链表 编写一个程序,找到两个单链表相交的起始节点。 如下面的两个链表 : 在节点 c1 开始相交。 示例 1: 输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3 输出:Reference of the node with value = 8 输入解释:相交节点的值为 8 (注意,如果两个列表相交则不能为 0)。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,0,1,8,4,5]。在 A 中,相交节点前有 2 个节点;在 B 中,相交节点前有 3 个节点。 示例 2: 输入:intersectVal = 2, listA = [0,9,1,2,4], listB = [3,2,4], skipA = 3, skipB = 1 输出:Reference of the node with value = 2 输入解释:相交节点的值为 2 (注意,如果两个列表相交则不能为 0)。从各自的表头开始算起,链表 A 为 [0,9,1,2,4],链表 B 为 [3,2,4]。在 A 中,相交节点前有 3 个节点;在 B 中,相交节点前有 1 个节点。 示例 3: 输入:intersectVal = 0, listA = [2,6,4

167. Add Two Numbers

六眼飞鱼酱① 提交于 2020-01-22 11:25:38
167. Add Two Numbers Description: You have two numbers represented by a linked list, where each node contains a single digit. The digits are stored in reverse order, such that the 1’s digit is at the head of the list. Write a function that adds the two numbers and returns the sum as a linked list. Example Example 1: Input: 7->1->6->null, 5->9->2->null Output: 2->1->9->null Explanation: 617 + 295 = 912, 912 to list: 2->1->9->null Example 2: Input: 3->1->5->null, 5->9->2->null Output: 8->0->8->null Explanation: 513 + 295 = 808, 808 to list: 8->0->8->null Main Idea: Simulate the addition process

【leetcode】141. 环形链表( Linked List Cycle )

夙愿已清 提交于 2020-01-22 02:40:43
题目描述 【leetcode】141. 环形链表( Linked List Cycle ) 给定一个链表,判断链表中是否有环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。 进阶: 你能用 O(1)(即,常量)内存解决此问题吗? 第一次解答 思路: 首先想到的是哈希表,但是不符合进阶要求,于是看了题解,采用快慢指针 注意: 链表为空 test case: [3,2,0,-4] 1 [1,2] 0 [1] -1 [] -1 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public : bool hasCycle ( ListNode * head ) { if ( nullptr == head ) { return false ; } ListNode * p_fast = head - > next ; ListNode * p_slow = head ; while ( p_fast != nullptr && p

LeetCode 206. Reverse Linked List

孤街醉人 提交于 2020-01-20 01:31:17
Description Reverse a singly linked list. Example: Input: 1->2->3->4->5->NULL Output: 5->4->3->2->1->NULL Follow up: A linked list can be reversed either iteratively or recursively. Could you implement both? Solution 就新建一个头结点,然后遍历原链表,使用头插法搬到新链表中。 /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ class Solution { public ListNode reverseList(ListNode head) { ListNode p = head; ListNode newHead = new ListNode(0); newHead.next = null; while(p != null){ ListNode q = p; p = p.next; q.next = newHead.next; newHead.next

817. Linked List Components - LeetCode

拥有回忆 提交于 2020-01-08 19:24:30
Question 817. Linked List Components Solution 题目大意:给一个链表和该链表元素组成的一个子数组,求子数组在链表中组成多少个片段,每个片段中可有多个连续的元素 思路:构造一个set用来存储子数组元素用于判断是否存在,遍历链表,如果当前元素不存在而下一个元素存在就表示一个片段的开始了,遍历前先判断首元素是否存在 Java实现: public int numComponents(ListNode head, int[] G) { Set<Integer> existSet = new HashSet<>(); for (int tmp : G) { existSet.add(tmp); } int ans = existSet.contains(head.val) ? 1 : 0; ListNode cur = head; while (cur.next != null) { if (!existSet.contains(cur.val) && existSet.contains(cur.next.val)) { ans++; } cur = cur.next; } return ans; } 来源: https://www.cnblogs.com/okokabcd/p/9284926.html

203. Remove Linked List Elements (E)

别来无恙 提交于 2020-01-07 02:45:39
Remove Linked List Elements (E) Remove all elements from a linked list of integers that have value val . Example: Input: 1->2->6->3->4->5->6, val = 6 Output: 1->2->3->4->5 题意 将给定链表中所有含有指定值的结点删除。 思路 注意需要连续删除结点的情况。 代码实现 /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ class Solution { public ListNode removeElements ( ListNode head , int val ) { ListNode dumb = new ListNode ( 0 ) ; dumb . next = head ; ListNode pre = dumb ; ListNode cur = head ; while ( cur != null ) { if ( cur . val == val ) { pre . next = cur .

[算法][LeetCode]Linked List Cycle & Linked List Cycle II——单链表中的环

不想你离开。 提交于 2020-01-02 01:12:26
题目要求 Linked List Cycle Given a linked list, determine if it has a cycle in it. Follow up: Can you solve it without using extra space? 如何判断一个单链表中有环? Linked List Cycle II Given a linked list, return the node where the cycle begins. If there is no cycle, return null . Follow up: Can you solve it without using extra space? 如何找到环的第一个节点? 分析 一开始使用了复杂度O(n^2)的方法,使用两个指针a, b。a从表头开始一步一步往前走,遇到null则说明没有环,返回false;a每走一步,b从头开始走,如果遇到b==a.next,则说明有环true,如果遇到b==a,则说明暂时没有环,继续循环。 后来找到了复杂度O(n)的方法,使用两个指针slow,fast。两个指针都从表头开始走,slow每次走一步,fast每次走两步,如果fast遇到null,则说明没有环,返回false;如果slow==fast,说明有环,并且此时fast超了slow一圈,返回true。