【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;//双指针

    }
相关推荐
火星机器人life1 小时前
基于ceres优化的3d激光雷达开源算法
算法·3d
虽千万人 吾往矣1 小时前
golang LeetCode 热题 100(动态规划)-更新中
算法·leetcode·动态规划
arnold662 小时前
华为OD E卷(100分)34-转盘寿司
算法·华为od
ZZTC2 小时前
Floyd算法及其扩展应用
算法
测试19982 小时前
外包干了2年,技术退步明显....
自动化测试·软件测试·python·功能测试·测试工具·面试·职场和发展
lshzdq3 小时前
【机器人】机械臂轨迹和转矩控制对比
人工智能·算法·机器人
2401_858286114 小时前
115.【C语言】数据结构之排序(希尔排序)
c语言·开发语言·数据结构·算法·排序算法
猫猫的小茶馆4 小时前
【数据结构】数据结构整体大纲
linux·数据结构·算法·ubuntu·嵌入式软件
u0107735144 小时前
【字符串】-Lc5-最长回文子串(中心扩展法)
java·算法
帅逼码农4 小时前
K-均值聚类算法
算法·均值算法·聚类