单向链表的基本操作

/**
 * 单向链表
 */
public class SimpleLinkedList<T> {

  class Node<T> {
    public T data;
    public Node next = null; //自引用
  }

  private Node header = null; //头结点


  public SimpleLinkedList() {
    initList();
  }

  /**
   * 初始化链表
   */
  public void initList() {
    header = new Node();
    header.data = null;
    header.next = null;
  }

  /**
   * insert 插入数据  后排插入数据
   */
  public void insertList(T data) {
    Node<T> node = new Node<>();
    node.data = data;
    node.next = null;
    //假如是第一次插入数据  那么就直接给header好了。初始化的时候header 为 null
    if (this.header.data == null) {
      this.header = node;
    } else {//假如不是第一次插入数据 那么就要插入到链表的最后。
      Node temp = header;
      while (temp.next != null) {
        temp = temp.next;
      }
      temp.next = node;  //一直找到 最后一个
    }
  }

  public void insertListFront(T data){
    Node<T> node = new Node<>();
    node.data = data;
    node.next = null;
    if (this.header.data == null){
      this.header = node;
    }else {
      node.next = header;
      header = node;
    }
  }

  /**
   * print 链表
   */
  public void printList() {
    System.out.println("打印链表...");
    Node node = header;
    if (node == null) {
      System.out.println("");
    } else {
      while (node.next != null) {
        System.out.println(node.data);
        node = node.next;
      }
      System.out.println(node.data);
    }

  }


  /**
   * 链表的长度
   */
  public Integer length() {
    Integer length = 0;
    Node temp = header;
    if (temp.data != null) { //header  的 data  有数据
      length = 1;
    }
    while (temp.next != null) {
      length++;
      temp = temp.next;
    }
    return length;
  }


  /**
   * delete Node by position
   */
  public void deleteNodeByPosition(Integer position) {
    Integer currentPosition = 1;
    Node current = header;
    Node previous = header;

    if (position > length() || position <= 0) {
      return;
    }
    if (position == 1) {  //删除 header
      header = current.next;

    }else {
      while (current.next != null) { //删除中间的元素
        if (currentPosition == position) {
          previous.next = current.next;
          break;
        }
        currentPosition++;
        previous = current;
        current = current.next;
      }
      if (current.next == null) { //删除 tail
        previous.next = null;
      }
    }

  }
}

 

转载于:https://my.oschina.net/nxxYqmvPOvsfH/blog/3004141

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值