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

21

java 复制代码
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

java 复制代码
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

java 复制代码
public boolean hasCycle(ListNode head) {
//        if (head == null) return false;
//        HashMap<ListNode,Integer> linkListMap = new HashMap<ListNode, Integer>();
//        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

java 复制代码
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

java 复制代码
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 反转列表

java 复制代码
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回文链表

java 复制代码
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链表的中间节点

java 复制代码
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;//双指针

    }
相关推荐
倒头就睡的小比特4 天前
算法竞赛C++常用的STL
c++·算法
小羊没烦恼!4 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
猎头南楼4 天前
知识社区推荐系统实践:新用户冷启动与长短期兴趣建模的挑战 资深推荐算法工程师
人工智能·深度学习·算法·机器学习
旖旎夜光4 天前
力控面试题 01.01: 判定字符是否唯一(位运算) —— 题解
c++·学习·算法·leetcode·力控
wzdark4 天前
大规模并行计算中的负载均衡算法研究4
算法
Because_of_Her14 天前
并查集-听课笔记
笔记·算法·并查集
码流子4 天前
高速公路安全监测实践:碰撞监测预警+物联网底座,从感知到处置的闭环
大数据·人工智能·物联网·算法·架构
another heaven4 天前
【算法/C++ MD5算法能否逆解码?原理、C++实现与同类哈希算法对比】
c++·算法·哈希算法
wzdark4 天前
从算法设计模式看编程思维的抽象能力4
算法
2601_962218614 天前
万象生鲜系统称重自动多退少补算法解决生鲜非标品痛点
大数据·数据库·人工智能·python·算法