LeetCode刷题笔记-数据结构-day12

Posted LL.LEBRON

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode刷题笔记-数据结构-day12相关的知识,希望对你有一定的参考价值。

文章目录

LeetCode刷题笔记-数据结构-day12

24. 两两交换链表中的节点

1.题目描述

原题链接:24. 两两交换链表中的节点

2.解题思路

根据题目要求,直接遍历即可,具体看代码。

3.代码

class Solution 
public:
    ListNode* swapPairs(ListNode* head) 
        ListNode* dummy =new ListNode(-1);
        dummy->next=head;
        auto p=dummy;
        while(p->next&&p->next->next)
            auto t1=p->next,t2=t1->next;
            p->next=t2;
            t1->next=t2->next;
            t2->next=t1;
            p=t1;
        
        return dummy->next;
    
;

707. 设计链表

1.题目描述

原题链接:707. 设计链表

2.解题思路

定义一个Node内部类表示节点。

其他操作根据题目要求一步一步来即可,具体操作看代码及注释。

3.代码

class MyLinkedList 

    class Node
        int val;
        Node next;
        Node(int val)
            this.val=val;
            this.next=null;
        
    
    Node head=null;
    public MyLinkedList() 

    

    public int get(int index) 
        //索引无效返回-1
        if(index<0) return -1;
        Node t=head;
        for(int i=0;i<index&&t!=null;i++) t=t.next;
        //索引无效返回-1
        if(t==null) return -1;
        return t.val;
    

    public void addAtHead(int val) 
        Node p=new Node(val);
        p.next=head;
        head=p;
    

    public void addAtTail(int val) 
        //如果是第一个添加的节点,直接调用addAtHead方法
        if(head==null) head=new Node(val);
        //否则遍历到尾部添加
        else
            Node t=head;
            while(t.next!=null) t=t.next;
            t.next=new Node(val);;
          
    

    public void addAtIndex(int index, int val) 
        //如果index小于0,则在头部插入节点。
        if(index<=0) addAtHead(val);
        else
            int len=0;
            //求链表长度
            for(Node p=head;p!=null;p=p.next) len++;
            //如果 index 等于链表的长度,则该节点将附加到链表的末尾
            if(index==len) addAtTail(val);
            //如果 index 大于链表长度,则不会插入节点
            else if(index>len) return;
            else
                Node t=head;
                for(int i=0;i<index-1;i++) t=t.next;
                Node p=new Node(val);
                p.next=t.next;
                t.next=p;
            
                
    

    public void deleteAtIndex(int index) 
        int len=0;
        //求链表长度
        for(Node p=head;p!=null;p=p.next) len++;
        if(index>=0&&index<len)
            if(index==0) head=head.next;
            else
                Node t=head;
                //因为删除的是第index个节点,所以需要找到第index-1个节点
                for(int i=0;i<index-1;i++) t=t.next;
                t.next=t.next.next;
            
        
    


以上是关于LeetCode刷题笔记-数据结构-day12的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode刷题笔记-数据结构-day19

LeetCode刷题笔记-数据结构-day20

LeetCode刷题笔记-数据结构-day16

LeetCode刷题笔记-数据结构-day5

LeetCode刷题笔记-数据结构-day9

《LeetCode刷题笔记》Day1——数组