【LeetCode】刷题记录--单链表相关

21

public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
        if (list1 == null) return list2;
        if (list2 == null) return list1;
        ListNode result = new ListNode(0);
        ListNode p = result;
        while (list1 != null && list2 != null){
            if (list1.val < list2.val){
                p.next = list1;
                list1 = list1.next;
            }else {
                p.next = list2;
                list2 = list2.next;

            }
            p = p.next;
        }
        if (list1 != null) p.next = list1;
        if (list2 != null) p.next = list2;
        return result.next;
    }

83

public ListNode deleteDuplicates(ListNode head) {
        if (head == null) return head;
        ListNode result = head;
        while (result.next != null){
            if (result.val == result.next.val){
                result.next = result.next.next;
            }else {
                result = result.next;
            }
        }
        return head;
    }

141

public boolean hasCycle(ListNode head) {
//        if (head == null) return false;
//        HashMap linkListMap = new HashMap();
//        while (head.next != null){
//            if (linkListMap.get(head) == null){
//                linkListMap.put(head,head.val);
//            }else return true;
//            head = head.next;
//        }
//        return false;
        //-----------------------------------------------
        if (head == null) return false;
        ListNode fastPtr = head,slowPtr = head;
        while (fastPtr.next != null && fastPtr.next.next != null){
            fastPtr = fastPtr.next.next;
            slowPtr = slowPtr.next;


            if (fastPtr == slowPtr) return true;


        }
        return false;
        
    }

142

public ListNode detectCycle(ListNode head) {
        if (head == null) return null;
        boolean test = false;
        ListNode fast = head,slow = head;
        while (fast.next != null && fast.next.next != null){
            fast = fast.next.next;
            slow = slow.next;
            if (slow == fast) {
                test = true;
                break;
            }
        }

        if (test){
            slow = head;
            while (slow != fast){
                slow = slow.next;
                fast = fast.next;
            }
            return slow;
        }
        return null;
    }

160

public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
        int L1=0,L2=0;
        ListNode la = headA,lb = headB;
        while (la != null){
            L1++;
            la = la.next;
        }
        while (lb != null){
            L2++;
            lb = lb.next;
        }
        if ((L1 - L2)>0){
            //a比b长
            for (int i = 0; i < (L1 - L2); i++) headA = headA.next;
            while (headA != headB) {
                headA = headA.next;
                headB = headB.next;
            }
            return headA;
        }else {
            //b比a长或相等
            for (int i = 0; i < (L2 - L1); i++) headB = headB.next;
            while (headB != headA){
                headA = headA.next;
                headB = headB.next;
            }
            return headA;
        }
    }

206 反转列表

public ListNode reverseList(ListNode head) {
        ListNode currNode = head;
        ListNode preNode = null;
        while (currNode != null){
            ListNode next = currNode.next;
            currNode.next = preNode;
            preNode = currNode;
            currNode = next;
        }
        return preNode;
    }

234回文链表

public boolean isPalindrome(ListNode head) {
        if (head == null) return false;
        ListNode fast = head,slow = head;
        while (fast != null && fast.next != null){
            fast = fast.next.next;
            slow = slow.next;
        }
        if (fast != null){
            slow = slow.next;
        }
        slow = reverse(slow);
        fast = head;
        while (slow != null){
            if (fast.val != slow.val) return false;
            fast = fast.next;
            slow = slow.next;
        }
        return true;
}
public ListNode reverse(ListNode head){
        ListNode preNode = null;
        while (head != null){
            ListNode next = head.next;
            head.next = preNode;
            preNode = head;
            head = next;
        }
        return preNode;
    }

876链表的中间节点

public ListNode middleNode(ListNode head) {
        ListNode fast = head,slow = head;
        while (fast != null && fast.next != null){
            fast = fast.next.next;
            slow = slow.next;
        }
        return slow;//双指针

    }

你可能感兴趣的:(leetcode,算法,职场和发展)