Java中单链表的增删查改

最近刷题的时候刷到了剑指offter的单链表反转问题。因为工作需求,从头开始自学的Java,当初数据结构都是从C/C++起家的。所以再用Java做单链表反转的时候根据以往的思路,怎么改都不对。
但是由于苦于牛客网上没有源代码,供我进行调试。无奈之下,只好去整理了一下Java数据结构的资料。做了一个简易版的单链表的增删改查。
思路比较直观,可以帮助想研究Java单链表的担忧没有源代码可以参考的小白参考一下。
大佬看看就好,下面放代码:
`在这里插入代码public class ListNode {
int val; //链表中的值
int pos=1; //当前节点的位置
int total=0; //统计当期链表的总长度

ListNode next = null;

ListNode(){
    this.head=null;
}

ListNode(int val) {
    this.val = val;
}

void display(ListNode node){
    System.out.print(node.val+"   ");
}

ListNode head=null;


public void FirstAdd(int val){                  //在首节点对链表进行插入
    ListNode node=new ListNode(val);
    node.next=head;
    head=node;
    total++;
}

public  void Add(int index,int val){          //在第index位置对节点进行插入
    ListNode newNode=new ListNode(val);
    ListNode current=head;
    ListNode pre=head;

    if(total+1<index||index<=0){                //若输入的插入的节点位置小于或等于0,
        return;                                 //或者输入的节点位置大于了链表的长度+1时,
    }else{                                      //会直接结束当前插入操作
        if(index==1){                           //头节点插入不同于中间节点插入,另作讨论
            newNode.next=head;
            head=newNode;
            return;
        }else {
            current=current.next;
            while (pos+1!=index){
                pre=pre.next;
                current=current.next;
                pos++;
            }
            pre.next=newNode;
            newNode.next=current;

        }
        total++;
        pos=1;
    }
}

public void DeleteHead(){               //删除头部
    ListNode pre=head;
    head=pre.next;
    total--;
}

public  void Delete(int index){         //删除指定的节点
    ListNode current=head;
    ListNode pre=head;
    if(index>total||total<=0){
        return;
    }else {
        if(index==1){
            pre=head;
            head=pre.next;
            total--;
            return;
        }else {
            current=current.next;
            while(index-1!=pos){
                pre=pre.next;
                current=current.next;
                pos++;
            }
            pre.next=current.next;
            current=null;
            total--;
        }
    }
    pos=1;
}

public int Serach(int val){            //查找链表的下标
    ListNode current=head;
    while (current!=null){
        if(current.val==val){
            return pos;
        }else {
            pos++;
        }
        current=current.next;
    }
    return -1;
}

public void ReverseList(){              //单链表反转
   
}

public void print(){                            //对链表进行打印
    ListNode current=head;

    while(current!=null){
        display(current);
        current=current.next;
    }
    System.out.println("");
}

public static void main(String[] args) {
    ListNode node=new ListNode();
    node.FirstAdd(1);
    node.FirstAdd(2);
    node.FirstAdd(3);
    node.FirstAdd(4);
    node.FirstAdd(5);

    int index=node.Serach(1);
    System.out.println("数值1的下标为"+index);
    node.Add(6,10);
   node.Delete(2);
    node.print();
    node.print();
  }
}

关于单链表的反转部分,还没找到问题所在。后便博客会补上单链表的反转问题。以及双链表的问题,二叉树的遍历,二叉树的重构问题。

发布了16 篇原创文章 · 获赞 1 · 访问量 877

猜你喜欢

转载自blog.csdn.net/nisemono_ct/article/details/95514797