160.Intersection of Two Linked Lists
注意,链表结点相同意味着他们的值相同,下一个结点也相同
方法1:暴力法
方法2:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
if(headA==null||headB==null)
return null;
ListNode pa=headA,pb=headB;
while(pa!=pb)
{
pa=pa==null?headA:pa.next;
pb=pb==null?headB:pb.next;
}
return pa;
}
}
方法3哈希法:
public class Solution {
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
HashSet<ListNode> set=new HashSet();
while (headA!=null){
set.add(headA);
headA=headA.next;
}
while (headB!=null){
if(set.contains(headB))
return headB;
headB=headB.next;
}
return null;
}
}
206 Reverse Linked List
头插法:
class Solution {
public ListNode reverseList(ListNode head) {
ListNode newHead = null;
while (head != null) {
ListNode next = head.next;
head.next = newHead;//画图理解
newHead = head;
head = next;
}
return newHead;
}
}
递归解法:
public ListNode reverseList(ListNode head) {
if (head == null || head.next == null) {
return head;
}
ListNode next = head.next;
ListNode newHead = reverseList(next);
next.next = head;
head.next = null;
return newHead;
}
21. 合并两个有序链表
递归解法:
class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
if (l1 == null) return l2;
if (l2 == null) return l1;
if (l1.val < l2.val)