class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
int row = 0;
int col = matrix[0].length-1;
while(row<matrix.length && col>=0){
if (matrix[row][col]==target){
return true;
}
if (matrix[row][col]>target){
col--;
}else{
row++;
}
}
return false;
}
}
public class Solution {
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
ListNode curA = headA;
ListNode curB = headB;
int sizeA = 0;
int sizeB = 0;
if (curA==null || curB==null) return null;
while(curA!=null){
sizeA++;
curA = curA.next;
}
while(curB!=null){
sizeB++;
curB = curB.next;
}
curA = headA;
curB = headB;
if (sizeA>sizeB){
for (int i=0;i<sizeA-sizeB;i++){
curA = curA.next;
}
}else if (sizeB>sizeA){
for (int i=0;i<sizeB-sizeA;i++){
curB = curB.next;
}
}
while(curA!=null){
if (curA == curB){
return curA;
}else{
curA = curA.next;
curB = curB.next;
}
}
return null;
}
}
public class Solution {
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
HashMap<ListNode,Integer> map = new HashMap<>();
ListNode temp = headA;
while(temp!=null){
map.put(temp,1);
temp = temp.next;
}
while(headB!=null){
if (map.containsKey(headB)){
return headB;
}else{
headB = headB.next;
}
}
return null;
}
}
class Solution {
public ListNode reverseList(ListNode head) {
ListNode cur = head;
ListNode pre = null;
while(cur!=null){
ListNode temp = cur.next;
cur.next = pre;
pre = cur;
cur = temp;
}
return pre;
}
}
class Solution {
public boolean isPalindrome(ListNode head) {
int len = 0;
ListNode cur = head;
while(cur!=null){
len++;
cur = cur.next;
}
int[] array = new int[len];
for (int i=0;i<len;i++){
array[i] = head.val;
head = head.next;
}
int left = 0;
int right = len - 1;
while(left<right){
if (array[left]!=array[right]) return false;
left++;
right--;
}
return true;
}
}
class Solution {
public boolean isPalindrome(ListNode head) {
int len = 0;
ListNode cur = head;
while(cur!=null){
len++;
cur = cur.next;
}
int mid = len/2;
ListNode right = head;
while(mid>0){
mid--;
right = right.next;
}
mid = len/2;
ListNode left = head;
ListNode pre = null;
while(mid>0){
mid--;
ListNode temp = left.next;
left.next = pre;
pre = left;
left = temp;
}
ListNode startleft = pre;
ListNode startright = null;
if (len%2==0){
startright = right;
}else{
startright = right.next;
}
mid = len/2;
while(mid>0){
mid--;
if (startleft.val!=startright.val) return false;
startleft = startleft.next;
startright = startright.next;
}
return true;
}
}