数据结构第二章:线性表的链式表示和实现
1.代码实现
/**
* @description 线性表的链式表示和实现
* @author wcc
*/
public class MyLinkedList<T> {
private Node<T> head;
private int length;
public MyLinkedList(){
length = 0;
head = new Node<>(null);
}
//在指定位置处添加结点
public void add(T obj,int position){
if (position<1||position>(length+1)){
System.out.println("添加结点位置错误");
System.exit(1);
}
Node<T> p = head;
Node<T> q = p.next;
for (int i = 0; i < position-1; i++) {
p = q;
q = q.next;
}
p.next = new Node<>(obj,q);
length++;
}
//删除指定为位置的结点,并返回删除的结点对象数据,position为1,删除第一个结点
public T delete(int position){
if (position<1||position>length){
System.out.println("结点元素不存在");
System.exit(1);
}
Node<T> p = head;
Node<T> q = head.next;
for (int i = 0; i < position-1; i++) {
p = q;
q = q.next;
}
p.next = q.next;
length--;
return q.data;
}
//查找某个位置的结点数据
public T find(int position){
if (position<1||position>length){
System.out.println("结点元素不存在");
return null;
}
Node<T> p = head;
for (int i = 0; i < position; i++) {
p = p.next;
}
return p.data;
}
//查找某个数据在链表中的位置,如不存在返回-1
public int searchNodeData(T data){
Node<T> p = head;
int position = 1;
while (p.next!=null){
p = p.next;
if (p.data.equals(data)){
return position;
}
position++;
}
return -1;
}
public void nextOrder(){
Node<T> p =head.next;
while(p!=null){
System.out.println(p.data);
p=p.next;
}
}
public static void main(String[] args) {
MyLinkedList<Integer> linkedList = new MyLinkedList<>();
linkedList.add(1,1);
linkedList.add(2,1);
linkedList.add(3,2);
linkedList.add(4,1);
linkedList.nextOrder();
Integer delete = linkedList.delete(3);
System.out.println("delete = " + delete);
linkedList.nextOrder();
Integer integer = linkedList.find(3);
System.out.println("integer = " + integer);
int nodeData = linkedList.searchNodeData(2);
System.out.println("nodeData position " + nodeData);
}
}
class Node<T> {
T data;
Node<T> next;
public Node(Node<T> node) {
next = node;
}
public Node(T data, Node<T> next) {
this.data = data;
this.next = next;
}
}
艾欧尼亚,昂扬不灭,为了更美好的明天而战(#^.^#)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构