首页 > 其他分享 >Day4 链表的基本操作2

Day4 链表的基本操作2

时间:2023-10-17 23:44:09浏览次数:47  
标签:ListNode cur Day4 next 链表 while curA 基本操作

Day4 链表剩下的基本操作

Lc24 
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
//画个图,弄个新节点,然后按照顺序进行连接,最主要的是连的时候思路要清晰
class Solution {
public:
    ListNode* swapPairs(ListNode* head) {
        ListNode* dummyHead=new ListNode(0);
        dummyHead->next=head;
        ListNode* cur=dummyHead;
        while(cur->next!=nullptr&&cur->next->next!=nullptr){
            ListNode *temp1=cur->next;
            ListNode *temp2=cur->next->next->next;
            cur->next=cur->next->next;
            cur->next->next=temp1;
            cur->next->next->next=temp2;
            cur=cur->next->next;
        }
        return dummyHead->next;
    }
};
Lc19 删除链表倒数第n个元素,注意审题,一开始写成了显示倒数第n个元素,另外注意让快指针多走一步,这样方便慢指针直接删除元素。
class Solution {
public:
    ListNode* removeNthFromEnd(ListNode* head, int n) {
        ListNode *dummyNode=new ListNode(0);
        dummyNode->next=head; //每次自定义完记得让dummynode指向头节点
        ListNode *pre=dummyNode;
        ListNode *cur=dummyNode;
        while(n--&&cur!=NULL){
            cur=cur->next;
        }
        cur=cur->next;  //让快指针再多走一步,这样
        while(cur){
            cur=cur->next;
            pre=pre->next;
        }
        pre->next=pre->next->next;
        return dummyNode->next;
    }
};
///链表相交的题目,不知道为啥leetcode一直过不了,不理解。
class Solution {
public:
    ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
      ListNode * curA= headA;
      ListNode * curB= headB;
      int lenA,lenB=0;//求一下两个链表的长度
      while(curA!=NULL){
          lenA++;
          curA=curA->next;
      }  
      while(curB!=NULL){
          lenB++;
          curB=curB->next;
      }
      curA=headA;
      curB=headB;
      if(lenB>lenA){
          swap(curA,curB);//保证永远是A最大
          swap(lenA,lenB);
      }
      int gap=lenA-lenB;
      while(gap--){
          curA=curA->next;
      }
      while(curA!=NULL){
          if(curA==curB){
              return curA;
          }
          curA=curA->next;
          curB=curB->next;
      }
      return NULL;
    }
};
环的进阶问题,实际上仔细思考很有意思 Lc142
首先是如何哦判断链表是否有环,这个很简单,就是快慢指针同时出发,如果相遇的话说明有环,如果没相遇的话说明无环。其次是判断环的相遇位置:这个就比较有意思了,直接让一个指针从当前位置出发,一个指针从头出发,他们第一次相遇的位置一定是环相遇的位置,也就是x=z
class Solution {
public:
    ListNode *detectCycle(ListNode *head) {
        ListNode *fast=head;
        ListNode *slow=head;
        while(fast!=NULL&&fast->next!=NULL){
            fast=fast->next->next;
            slow=slow->next;
            if(fast==slow){
                ListNode *index1=fast;
                ListNode *index2=head;
                while(index1!=index2){
                index1=index1->next;
                index2=index2->next;
                }
                return index2;
            }
          
        }
          return   NULL;
    }
};

标签:ListNode,cur,Day4,next,链表,while,curA,基本操作
From: https://www.cnblogs.com/fancele/p/17771043.html

相关文章

  • Leetcode24. 两两交换链表中的节点
    题目描述给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。示例提交的代码classSolution{ListNodenextNode;publicListNodeswapPairs(ListNodehead){//特殊化处理......
  • 十天学完基础数据结构-第四天(链表(Linked List))
    链表的基本概念链表是一种线性数据结构,与数组不同,链表的元素(节点)之间通过指针相互连接。链表有以下基本概念:节点:链表中的每个数据项称为节点,每个节点包含数据和一个指向下一个节点的指针。头节点:链表的第一个节点称为头节点,它通常用来表示整个链表的起始位置。尾节点:链表的最后一个......
  • 代码随想训练营第四天(Python)| 24. 两两交换链表中的节点、19.删除链表的倒数第N个节点
    两两交换链表中的节点关键点:涉及到头节点变动的都使用虚拟节点。画图找出交换节点指向的顺序和退出循环的条件。1、迭代法classSolution:defswapPairs(self,head:Optional[ListNode])->Optional[ListNode]:dummy_node=ListNode(next=head)cur=......
  • Day3 链表的一些基本练习
    Day3链表的基础练习最基本的删除节点Lc203我习惯的还是弄一个新的dummyhead,然后如果是要找的节点,就删除,删除完记得delete。//代码没什么好看的,主要就是熟悉链表的写法classSolution{public:ListNode*removeElements(ListNode*head,intval){ListNode......
  • Leetcode206. 反转链表
    题目描述给你单链表的头节点head,请你反转链表,并返回反转后的链表。示例提交的代码classSolution{publicListNoderesultHead;publicListNodereverseList(ListNodehead){if(head==null)returnnull;ListNodefirst=recursionOfList(he......
  • java链表详解 理论+代码+图示
    1、定义链表是一种物理存储结构上非连续存储结构,数据元素的逻辑顺序是通过链表中的引用链接次序实现的。(即链表是一个个节点组成的,这些节点物理上不连续,但逻辑上连续)一个节点就是一个Node对象。2、链表结构单向、双向;带头、不带头;循环、非循环; 以上情况组......
  • 实验五 队列的基本操作及应用
    实验五队列的基本操作及应用作业要求:实验时间:第7、8周实验目的:掌握队列的初始化、判空、取队头元素、出队、入队、输出队列元素等基本操作实验要求:1、认真阅读和掌握教材上和本实验相关的算法。2、上机将链队列或循环队列的相关算法实现。3、实现下面实验内容要求的功能,并......
  • Leetcode707. 设计链表
    题目描述你可以选择使用单链表或者双链表,设计并实现自己的链表。单链表中的节点应该具备两个属性:val和next。val是当前节点的值,next是指向下一个节点的指针/引用。如果是双向链表,则还需要属性prev以指示链表中的上一个节点。假设链表中的所有节点下标从0开始。实现M......
  • 代码随想训练营第三天(Python) | 203.移除链表元素、707.设计链表、206.反转链表
    一、203.移除链表元素关键点:如何删除节点,需要知道删除节点前的节点。1、无虚拟头节点的方法classSolution:defremoveElements(self,head:Optional[ListNode],val:int)->Optional[ListNode]:whilehead!=Noneandhead.val==val:#如果头节点的值......
  • pandas教程01: pandas的安装和基本操作
    pandas是Python中常用的数据处理库,主要用来处理表格数据,类似于下面这种:好好干文化有限公司员工薪资表姓名年龄性别年薪奖金久九刘35男18260042000傅儿待24男996000040000000舍处28女6000018000大家想一想,无论是日常办公使用的excel还是数据库,是......