首页 > 编程语言 >算法学习day04链表part02-24、19、0207、142

算法学习day04链表part02-24、19、0207、142

时间:2023-07-01 16:13:27浏览次数:52  
标签:24 ListNode next 链表 curB curA 142 null

package SecondBrush.LinkedList.LL1;



/**
 * 24. 两两交换链表中的节点
 * */
public class SwapNodesInPairs_24 {

    public ListNode swapPairs(ListNode head){
        ListNode dummyhead = new ListNode(-1);
        dummyhead.next = head;
        ListNode cur = dummyhead;
        ListNode temp;
        ListNode firstnode;
        ListNode secondnode;
        while (cur.next != null && cur.next.next != null){
            temp = cur.next.next.next;
            firstnode = cur.next;
            secondnode = cur.next.next;
            cur.next = secondnode;
            secondnode.next = firstnode;
            firstnode.next = temp;
            cur = temp;
        }
        return dummyhead.next;
    }

}
package SecondBrush.LinkedList.LL1;
/**
 * 19. 删除链表的倒数第 N 个结点
 * */
public class RemoveNthNodeFromEnd_19 {
    public ListNode remove(ListNode head,int n){
        ListNode dummyhead = new ListNode(-1);
        dummyhead.next = head;
        ListNode fastindex = dummyhead;
        ListNode slowindex = dummyhead;
        for (int i = 0; i < n; i++) {
            fastindex = fastindex.next;
        }
        while (fastindex != null){
            fastindex = fastindex.next;
            slowindex = slowindex.next;
        }
        slowindex.next = slowindex.next.next;
        return dummyhead.next;
    }

}
package SecondBrush.LinkedList.LL1;

/**
 * 面试题 02.07. 链表相交
 *
 * */

public class IntersectionTwoLinked_0207 {
    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
        ListNode curA = headA;
        ListNode curB = headB;
        int lenA = 0, lenB = 0;
        while (curA != null) { // 求链表A的长度
            lenA++;
            curA = curA.next;
        }
        while (curB != null) { // 求链表B的长度
            lenB++;
            curB = curB.next;
        }
        curA = headA;
        curB = headB;
        // 交换这里没看明白
        // 让curA为最长链表的头,lenA为其长度
        if (lenB > lenA) {
            //1. swap (lenA, lenB);
            int tmpLen = lenA;
            lenA = lenB;
            lenB = tmpLen;
            //2. swap (curA, curB);
            ListNode tmpNode = curA;
            curA = curB;
            curB = tmpNode;
        }
        // 求长度差
        int gap = lenA - lenB;
        // 让curA和curB在同一起点上(末尾位置对齐)
        while (gap-- > 0) {
            curA = curA.next;
        }
        // 遍历curA 和 curB,遇到相同则直接返回
        while (curA != null) {
            if (curA == curB) {
                return curA;
            }
            curA = curA.next;
            curB = curB.next;
        }
        return null;
    }

}
package SecondBrush.LinkedList.LL1;


/**
 * 142. 环形链表 II
 *  1.判断链表是否环:可以使用双指针,一个跑的块,一个跑的慢,如果是环,肯定可以相遇在环内
 *  2.如果有环,如何找到这个环的入口:这个牵扯到数学计算
 * */

public class LinkedListCycleII_142 {
    public ListNode detectCycle(ListNode head){
        ListNode slow = head;
        ListNode fast = head;
        while (fast!= null && fast.next != null){
            slow = slow.next;
            fast = fast.next.next;
            if (slow == fast){ // 有环
                ListNode index1 = fast;
                ListNode index2 = head;
                while (index1 != index2){
                    index1 = index1.next;
                    index2 = index2.next;
                }
                return index1;
            }
        }
        return null;
    }

}

 

标签:24,ListNode,next,链表,curB,curA,142,null
From: https://www.cnblogs.com/lipinbigdata/p/17519420.html

相关文章

  • 【leetcode】【234】【回文链表】
    c++第一个方法#include<algorithm>#include<iostream>#include<memory>#include<vector>//Definitionforsingly-linkedlist.structListNode{intval;ListNode*next;ListNode():val(0),next(nullptr){}Li......
  • [刷题记录Day3]Leetcode链表专题
    #ListNodedefinitionpublicclassListNode{//结点的值intval;//下一个结点ListNodenext;//节点的构造函数(无参)publicListNode(){}//节点的构造函数(有一个参数)publicListNode(intval){this.val=val;......
  • 【leetcode】【206】【反转链表】
    c++第一个方法#include<algorithm>#include<iostream>#include<memory>#include<vector>//Definitionforsingly-linkedlist.structListNode{intval;ListNode*next;ListNode():val(0),next(nullptr){}Li......
  • js 数组和链表分别实现队列
    链表实现/***1.单项链表实现队列,但要同时记录head和tail*2.要从tail入队,head出对,否则出队时,tail不好定位*2.单独记录length,不可遍历链表获取length*/classMyQueue{head=null;//头tail=null;//尾len=0;add(n){letnewNode={......
  • 【leetcode】【83】【移除链表元素】
    c++第一个方法#include<algorithm>#include<iostream>#include<memory>#include<vector>//Definitionforsingly-linkedlist.structListNode{intval;ListNode*next;ListNode():val(0),next(nullptr){}Li......
  • LeetCode 142. 环形链表 II
    /***Definitionforsingly-linkedlist.*structListNode{*intval;*ListNode*next;*ListNode(intx):val(x),next(NULL){}*};*/classSolution{public:ListNode*detectCycle(ListNode*head){if(!head)return......
  • 【雕爷学编程】Arduino动手做(142)---GY-25串口倾斜度模块
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞......
  • leetcode 19. 删除链表的倒数第 N 个结点
    链表问题,需要注意一下是倒着数还是正着数,和头结点会不会被删除即可publicListNoderemoveNthFromEnd(ListNodehead,intn){if(head==null){returnnull;}//头结点会被删除吗?intlength=0;ListNodep=......
  • RTE24012 直流电源 TE Connectivity 芯脉芯城
    RTE24012是一款电源模块,它提供可靠的直流电源转换功能。以下是对RTE24012的详细参数描述:输入电压范围:RTE24012的输入电压范围为18V至36V。这使得它能够适应不同的电源输入条件。输出电压:RTE24012的输出电压为12V。它提供稳定的直流电源输出,以满足设备或系统的电源需求。输出电流......
  • 【leetcode】【83】【删除排序链表中的重复元素】
    c++第一个方法代码#include<algorithm>#include<iostream>#include<memory>#include<vector>//Definitionforsingly-linkedlist.structListNode{intval;ListNode*next;ListNode():val(0),next(nullptr){}......