• java数据结构和算法------线性表(链表结构)


    1 package iYou.neugle.list;
    2 
    3 // 链表数据结构
    4 public class Node<T> {
    5     // 该节点的值
    6     public T data;
    7     // 该节点指向的下一个节点
    8     public Node<T> next;
    9 }
      1 package iYou.neugle.list;
      2 
      3 public class MyChainList<T> {
      4     // 向链表尾部添加元素
      5     public Node<T> AddEnd(Node<T> head, T data) {
      6         Node<T> node = new Node<T>();
      7         node.data = data;
      8         if (head == null) {
      9             head = node;
     10             return head;
     11         }
     12         SearchEnd(head).next = node;
     13         return head;
     14     }
     15 
     16     private Node<T> SearchEnd(Node<T> head) {
     17         if (head.next == null) {
     18             return head;
     19         }
     20         return SearchEnd(head.next);
     21     }
     22 
     23     // 向链表头部添加元素
     24     public Node<T> AddHead(Node<T> head, T data) {
     25         Node<T> node = new Node<T>();
     26         node.data = data;
     27         Node<T> nodeCopy = DeepCopy(head, new Node<T>());
     28         node.next = nodeCopy;
     29 
     30         head.data = node.data;
     31         head.next = node.next;
     32         return head;
     33     }
     34 
     35     private Node<T> DeepCopy(Node<T> head, Node<T> node) {
     36         if (head != null) {
     37             node.data = head.data;
     38             node.next = head.next;
     39         } else {
     40             return null;
     41         }
     42         DeepCopy(head.next, node.next);
     43         return node;
     44     }
     45 
     46     // 向链表中插入数据
     47     public Node<T> Insert(Node<T> head, T key, T data) {
     48         if (head.next == null) {
     49             return null;
     50         }
     51 
     52         if (head.data.equals(key)) {
     53             return AddHead(head, data);
     54         }
     55 
     56         if (head.next.data.equals(key)) {
     57             Node<T> node = new Node<T>();
     58             node.data = data;
     59             node.next = head.next;
     60             head.next = node;
     61             return head;
     62         }
     63         Insert(head.next, key, data);
     64         return head;
     65     }
     66 
     67     // 向链表中删除数据
     68     public Node<T> Delete(Node<T> head, T key) {
     69         if (head.next == null) {
     70             return null;
     71         }
     72 
     73         if (head.data.equals(key)) {
     74             head.data = head.next.data;
     75             head.next = head.next.next;
     76             return head;
     77         }
     78 
     79         if (head.next.data.equals(key)) {
     80             head.next = head.next.next;
     81             return head;
     82         }
     83         Delete(head.next, key);
     84         return head;
     85     }
     86 
     87     // 按关键字查找节点
     88     public void Search(Node<T> head, T key) {
     89         if (head.data.equals(key)) {
     90             System.out.println("查询节点为头结点,节点值为:" + key);
     91             return;
     92         }
     93         while (head.next != null) {
     94             if (head.next.data.equals(key)) {
     95                 System.out.print("查询节点为:" + key + ",");
     96                 System.out.print("查询节点前置节点为:" + head.data + ",");
     97                 if (head.next.next != null) {
     98                     System.out.println("查询节点后置节点为:" + head.next.next.data);
     99                 } else {
    100                     System.out.println("查询节点为尾节点!");
    101                 }
    102                 return;
    103             }
    104             head = head.next;
    105         }
    106         System.out.println("没有该节点!");
    107     }
    108 
    109     // 获取链表长度
    110     public int SizeOf(Node<T> head) {
    111         // 如果没有节点,返回-1
    112         if (head == null) {
    113             return -1;
    114         }
    115         int n = 1;
    116         while (head.next != null) {
    117             n++;
    118             head = head.next;
    119         }
    120         return n;
    121     }
    122 
    123     public void Print(Node<T> head) {
    124         while (head != null) {
    125             System.out.println(head.data);
    126             head = head.next;
    127         }
    128     }
    129 }
  • 相关阅读:
    数据库课程设计
    VB.NET 数组的定义 动态使用 多维数组
    Hadoop学习之配置Eclipse远程调试Hadoop
    2014阿里巴巴研发project师暑期实习生面试经验
    SD卡中FAT32文件格式高速入门(图文具体介绍)
    Java抓取网页数据(原网页+Javascript返回数据)
    WPF中的CheckBox的_ (underscore / 下划线)丢失
    初识EPC
    SharePoint 2013 中代码创建列表查阅项字段
    代码编写逻辑(先伪代码,再带方法的逻辑,最后实现具体方法)(先控制器,再模型)
  • 原文地址:https://www.cnblogs.com/niuxiaoha/p/4635236.html
Copyright © 2020-2023  润新知