编程导航算法通关村第一关|青铜|链表基础

这篇具有很好参考价值的文章主要介绍了编程导航算法通关村第一关|青铜|链表基础。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

单链表构造方法

Java

JVM有栈区和堆区

栈区:存引用,就是指向实际对象的地址。。

堆区:存的是创建的对象。

编程导航算法通关村第一关|青铜|链表基础,算法,算法,链表,数据结构

定义

规范的链表定义

public class ListNode{
    private int data;
    private ListNode next;
    public ListNode(int data){
        this.data=data;
    }
    public int getData(){
        return data;
    }
    public void setData(int data){
        this.data=data;
    }
    public ListNode getNext(){
        return next;
    }
    public void setNext(ListNode next){
        this.next=next;
    }
}

LeetCode算法题中常用

public class ListNode {
    public int val;
    public Node next;
    Node(int x) {
        val = x;
        ext = null;//作用不大,写了更标准
    }
}

遍历

public static int getListLength(Node head){
    int length=0;
    Node node=head;
    while(node!=null){
        length++;
        node=node.next;
    }
    return length;
}

插入

public static Node insertNode(Node head,Node nodeInsert,int position){
    //将节点插入一个空链表
    if(head==null){
        return nodeInsert;
    }
    //越界
    int size=getLength(head);
    if(position>size+1||position<1){
        System.out.println("位置参数越界");
        return head;
    }
    //表头插入
    if(position)==1){
        nodeInsert.next=head;
        head=nodeeInsert;
        return head;
    }
    //其他位置插入
    Node pNode=head;
    int count=1;
    while(count<position-1){
        pNode=pNode.next;
        count++;
    }
    nodeInsert.next=pNode.next;
    pNode.next=nodeinsert;
    return head;    
}

删除

public static Node deleteNode(Node head,int position){
    //排除空链表
    if(head==null){
        return null;
    }
    //越界
    int size=getLength(head);
    if(position >size+1||position <1){
        System.out.println("位置参数越界");
        return head;
    } 
    //删除节点
    if(position==1){
        head=head.next;
    }else{
        Node pNode=head;
        int count =1;
        while(count<position-1){
            count++;
            pNode=pNode.next;
        }
        Node delNode=pNode.next;
        pNode.next=delNode.next;
    }
    return head;
}

双向链表

编程导航算法通关村第一关|青铜|链表基础,算法,算法,链表,数据结构

Java

结点

class DoubleNode{
    public int data;
    public DoubleNode pre;
    public DoubleNode next;
    public DoubleNode(int data){
        this.data=data;
    }
}

结构&遍历

public class DoubleLinkList{
    private DoubleNode first;
    private DoubleNode last;
    public DoubleLinkList(){
        first=null;
        last=first;
    }
    //从头遍历
    public void displayForward(){
        DoubleNode current=first;
        while(current!=null){
            current.displayNode();
            current=current.next;
        }
    }
    //从尾部遍历
    public void displayBackward(){
        DoubleNode current=last;
        while(current!=null){
            current.displayNode();
            current=current.pre;
        }
    }
}

插入

从头插入

DoublyLinkList doublyLinkList = new DoublyLinkList();
doublyLinkList.insertFirst(20);
public void insertFirst(int data) {
    DoubleNode newDoubleNode = new DoubleNode(data);
    if (isEmpty()) {
        last=newDoubleNode;//列表初始化时first,last都为null
    }else{
        first.pre=newDoubleNode;
        newDoubleNode.next=first;
    }	
    first=newDoubleNode;//让该结点称为第一个节点
}

从尾插入

public void insertLast(int data) {
    DoubleNode newDoubleNode = new DoubleNode(data);
    if (isEmpty()) {
        first=newDoubleNode;//列表初始化时first,last都为null
    }else{
        newDoubleNode.pre=last;
        last.next=newDoubleNode;
    }
    last=newDoubleNode;//让该结点称为最后一个节点
}

从某个值为key的节点后面插入

public void insertAfter(int key, int data){
    DoubleNode newDoubleNode = new DoubleNode(data);
    DoubleNode current = first;
    //找值为key的节点
    while ((current != null) && (current.data != key)){
        current = current.next;
    }
    //若current==null,要么链表为空,要么没有值为key的数
    if (current == null){
       //根据题意来写... 
    }else{
        //这里还有可能key值是最后一个数,写法参考上面,这里不再考虑
        newDoubleNode.next=current.next;
        current.next.prev = newDoubleNode;
        newDoubleNode.pre=current;
        current.next=newDoubleNode;
    }
}

删除

删除头结点

public DoubleNode deleteFirst(){
    //如果只有一个节点。需要多考虑一个变量last
    if (first.next == null){
        last=null;
    }else{
        first.next.pre=null;
    }
    first=first.next;  
}

删除尾结点

public DoubleNode deleteLast(){
    //如果只有一个节点。需要多考虑一个变量first
    if (first.next == null){
        first=null;
    }else{
        last.pre.next=null;
    }
    last=last.pre;
}

按值删除文章来源地址https://www.toymoban.com/news/detail-608647.html

public DoubleNode deleteKey(int key){
    DoubleNode current = first;
    //寻找key值所在的节点
    while (current != null && current.data != key){
        current = current.next;
    }
    //若current==null,要么链表为空,要么没有值为key的数
    if (current == null){
       //根据题意来写...
        return null;
    }else{
        //这里还有可能key值是第一个或者最后一个数,写法参考上面,这里不再考虑 
        current.next.prev = current.pre;
        current.pre.next=current.next;
    }
}

到了这里,关于编程导航算法通关村第一关|青铜|链表基础的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 算法通关村第一关——链表青铜挑战笔记

    算法通关村第一关——链表青铜挑战笔记

    链表的基本单元就是 节点 ,也就是说链表是由一个一个节点构成的。 而对于节点来说,里面至少会包含一个 指针 和一个 数据元素 ,也就是如下图所示: 其中数据域用来存放数据元素,指针域用来存放指向下一个节点的指针,这样一个一个连接起来的就是链表。如下图所

    2024年02月16日
    浏览(13)
  • 算法通关村第一关-链表青铜挑战笔记

    算法通关村第一关-链表青铜挑战笔记

    平时我们一般都是用数组,每个数组都会有一个相对应的索引,这样就使得数组能够方便的调用出对应索引得到需要的数据,但是这也造成了一个问题,那就是不好在数组中插入或者删除一个数据,例如 int arr[]={1,2,4,5}如果我想在数组中的2和4中添加一个数据3 那么我们首先就

    2024年02月15日
    浏览(10)
  • [Go版]算法通关村第一关青铜——链表青铜挑战笔记

    [Go版]算法通关村第一关青铜——链表青铜挑战笔记

    单向链表图示: 双向链表图示: 环形单向链表图示: 环形双向链表图示: 源码地址: GitHub-golang版本 如果是单向的,需要将当前节点 定位到要插入节点的前一个节点 ,否则一旦过了将无法回头找到前一个节点 如果是双向的,将当前节点 定位到要插入节点的前一个节点、

    2024年02月13日
    浏览(7)
  • 编程导航算法通关村第 1 关|青铜 - C++是如何构造出链表的

    编程导航算法通关村第 1 关|青铜 - C++是如何构造出链表的

             在C++中,链表是由一系列节点构成的,每个节点包含一个值和一个指向下一个节点的指针。         我们可以用结构体定义出一个节点:               在定义完后,我们将链表进行初始化,并插入5条数据:   接着我们在主函数中进行测试,看看是否能成

    2024年02月13日
    浏览(8)
  • 【无标题】算法通关村第一关——链表青铜挑战笔记

    【无标题】算法通关村第一关——链表青铜挑战笔记

    算法通关村第一关——链表青铜挑战笔记 C语言是如何构造出链表的 0.定义节点结构 1.建立头指针 2.建立temp指针 3.将节点连起来 3.1 把p指向temp 3.2 设立循环节点a+temp指向a+temp变为a

    2024年02月15日
    浏览(8)
  • 算法通关村第一关——链表青铜挑战笔记(单链表)

    在LeeCode中一般这样创建链表 要注意创建一个变量来遍历,不要把head丢掉了 count position - 1可以方便操作,还能防止下标越界(cur为null)

    2024年02月15日
    浏览(6)
  • [Go版]算法通关村第一关——链表青铜挑战笔记

    [Go版]算法通关村第一关——链表青铜挑战笔记

    单向链表图示: 双向链表图示: 环形单向链表图示: 环形双向链表图示: 源码地址: GitHub-golang版本 如果是单向的,需要将当前节点 定位到要插入节点的前一个节点 ,否则一旦过了将无法回头找到前一个节点 如果是双向的,将当前节点 定位到要插入节点的前一个节点、

    2024年02月15日
    浏览(8)
  • 编程导航算法第一关 |链表的基础

    今天也是算法通关村刚开始,学习了链表。 首先,链表是一种最基本的结构,我们通常在收到一个链表的时候只有一个指向链表头的指针head,因为链表就是通过头指针来寻找其他结点的。 链表中的每个结点都存在它的数据和指向下一个节点的指针。 在遍历链表中,我们只需

    2024年02月15日
    浏览(6)
  • 编程导航算法通关村第1关 | 青铜:单链表的增删改查

    链表中的每一个节点包含数据域和指针域 (构造在一个 struct 中),数据变量存储数据,指针变量存储下一个节点的地址。 链表的一个节点只能有一个后继 特点: 链表节点在内存中的位置可以不连续。 思路: 用 struct 包装节点 :成员包括数据和地址 用 class 包装链表 :成员有

    2024年02月13日
    浏览(8)
  • 编程导航算法通关村 | 链表中环的问题

    编程导航算法通关村 | 链表中环的问题

    在链表中还有一类经典的问题,那就是判断链表中是否有环,如果有环,环的入口如何确定。 用Hash来做会很容易,遍历一遍,把每一个元素都放入map中,有环的话,那我们就一定能匹配到。 这里最重要的问题, 如果快的能到达表尾就不会有环,否则如果存在环,则慢指针一

    2024年02月14日
    浏览(7)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包