Skip to content

Commit 7287a19

Browse files
committed
liinked list
1 parent 099259e commit 7287a19

File tree

4 files changed

+151
-103
lines changed

4 files changed

+151
-103
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
package com.leetcode.linkedlist;
2+
3+
import com.leetcode.util.ListNode;
4+
import com.leetcode.util.Utils;
5+
6+
import java.util.HashSet;
7+
8+
/**
9+
* name: two intersect list
10+
*/
11+
public class IntersectTwoList {
12+
13+
//use hashset to store the node
14+
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
15+
HashSet<ListNode> set = new HashSet<>() ;
16+
ListNode curNodeA = headA;
17+
int lenA = 0;
18+
while(curNodeA.next != null){
19+
set.add(curNodeA);
20+
lenA ++;
21+
curNodeA = curNodeA.next;
22+
}
23+
ListNode curNodeB = headB;
24+
int lenB = 0;
25+
while(curNodeB.next != null){
26+
boolean b = set.add(curNodeB);
27+
if(!b){
28+
return curNodeB;
29+
}
30+
lenB ++;
31+
curNodeB = curNodeB.next;
32+
33+
}
34+
return null;
35+
}
36+
37+
public static void main(String[] args) {
38+
39+
// build linked list
40+
// [4,1,8,4,5]
41+
ListNode node1 = new ListNode(4);
42+
ListNode node2 = new ListNode(1);
43+
ListNode node3 = new ListNode(8);
44+
ListNode node4 = new ListNode(5);
45+
node1.next = node2;
46+
node2.next = node3;
47+
node3.next = node4;
48+
49+
// [5,6,1,8,4,5]
50+
ListNode node11 = new ListNode(5);
51+
ListNode node22 = new ListNode(6);
52+
ListNode node33 = new ListNode(1);
53+
// ListNode node44 = new ListNode(8);
54+
ListNode node55 = new ListNode(4);
55+
ListNode node66 = new ListNode(5);
56+
57+
node11.next = node22;
58+
node22.next = node33;
59+
node33.next = node3;
60+
node3.next = node55;
61+
node55.next = node66;
62+
63+
64+
ListNode intersectionNode = new IntersectTwoList().getIntersectionNode(node1, node11);
65+
if (intersectionNode != null) {
66+
System.out.println(intersectionNode.val);
67+
} else {
68+
System.out.println("null");
69+
}
70+
}
71+
72+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
package com.leetcode.linkedlist;
2+
3+
import com.leetcode.util.ListNode;
4+
5+
public class IntersectTwoListS {
6+
7+
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
8+
ListNode curA = headA;
9+
ListNode curB = headB;
10+
int lenA = 0, lenB = 0;
11+
while (curA != null) { // 求链表A的长度
12+
lenA++;
13+
curA = curA.next;
14+
}
15+
while (curB != null) { // 求链表B的长度
16+
lenB++;
17+
curB = curB.next;
18+
}
19+
curA = headA;
20+
curB = headB;
21+
// 让curA为最长链表的头,lenA为其长度
22+
if (lenB > lenA) {
23+
//1. swap (lenA, lenB);
24+
int tmpLen = lenA;
25+
lenA = lenB;
26+
lenB = tmpLen;
27+
//2. swap (curA, curB);
28+
ListNode tmpNode = curA;
29+
curA = curB;
30+
curB = tmpNode;
31+
}
32+
// 求长度差
33+
int gap = lenA - lenB;
34+
// 让curA和curB在同一起点上(末尾位置对齐)
35+
while (gap-- > 0) {
36+
curA = curA.next;
37+
}
38+
// 遍历curA 和 curB,遇到相同则直接返回
39+
while (curA != null) {
40+
if (curA == curB) {
41+
return curA;
42+
}
43+
curA = curA.next;
44+
curB = curB.next;
45+
}
46+
return null;
47+
}
48+
49+
50+
public static void main(String[] args) {
51+
// build linked list
52+
// [4,1,8,4,5]
53+
ListNode node1 = new ListNode(4);
54+
ListNode node2 = new ListNode(1);
55+
ListNode node3 = new ListNode(8);
56+
ListNode node4 = new ListNode(5);
57+
node1.next = node2;
58+
node2.next = node3;
59+
node3.next = node4;
60+
61+
// [5,6,1,8,4,5]
62+
ListNode node11 = new ListNode(5);
63+
ListNode node22 = new ListNode(6);
64+
ListNode node33 = new ListNode(1);
65+
// ListNode node44 = new ListNode(8);
66+
ListNode node55 = new ListNode(4);
67+
ListNode node66 = new ListNode(5);
68+
69+
node11.next = node22;
70+
node22.next = node33;
71+
node33.next = node3;
72+
node3.next = node55;
73+
node55.next = node66;
74+
75+
ListNode intersectionNode = new IntersectTwoListS().getIntersectionNode(node1, node11);
76+
System.out.println(intersectionNode.val);
77+
78+
}
79+
}

src/main/java/com/leetcode/linkedlist/LinkedListOne.java

-63
This file was deleted.

src/main/java/com/leetcode/linkedlist/LinkedListTwo.java

-40
Original file line numberDiff line numberDiff line change
@@ -10,46 +10,6 @@
1010
*/
1111
public class LinkedListTwo {
1212

13-
/* public ListNode mergeTwoLists(ListNode head1, ListNode head2) {
14-
ListNode newHead, currentNode;
15-
ListNode currentHead1 = head1, currentHead2 = head2;
16-
if (head1.val < head2.val) {
17-
newHead = head1;
18-
currentNode = newHead;
19-
currentHead1 = head1.next;
20-
21-
} else if (head1.val > head2.val) {
22-
newHead = head2;
23-
currentNode = newHead;
24-
currentHead2 = head2.next;
25-
} else {
26-
currentHead1 = head1.next;
27-
currentHead2 = head2.next;
28-
newHead = head1;
29-
newHead.next = head2;
30-
currentNode = newHead.next;
31-
32-
}
33-
while (currentHead1 != null && currentHead2 != null) {
34-
if (currentHead1.val < currentHead2.val || currentHead2 == null) {
35-
currentNode.next = currentHead1;
36-
currentHead1 = currentHead1.next;
37-
38-
} else if (currentHead1.val > currentHead2.val || currentHead1 == null) {
39-
currentNode.next = currentHead2;
40-
currentHead2 = currentHead2.next;
41-
} else {
42-
currentHead1 = currentHead1.next;
43-
currentHead2 = currentHead2.next;
44-
currentNode.next = currentHead1;
45-
currentNode.next.next = currentHead2;
46-
47-
}
48-
}
49-
50-
return newHead;
51-
}*/
52-
5313
public ListNode mergeTwoLists(ListNode head1, ListNode head2) {
5414
ArrayList<Integer> list = new ArrayList<Integer>();
5515
while(head1 != null && head2 != null){

0 commit comments

Comments
 (0)