package DateStructuresHomework;
import homework.F;
public class SingleLinkedList {
private Node head=new Node("");
public void insert(Node Node)
{
Node temp=head;
while (true)
{
if (temp.next==null)
break;
temp=temp.next;
}
temp.next=Node;
display();
}
public void delete(int no)
{
Node temp=head;
for (int i = 0; i next;
}
temp.next=temp.next.next;
display();
}
public void find(Object x)
{
Node temp=head;
int n=0;
while (temp.next==null)
{
if (temp.val==x)
{
break;
}
n++;
}
System.out.println(n);
}
public void display()
{
Node temp=head;
while (temp.next==null)
System.out.print(temp.val+" ");
}
}
class Node{
public Object val;
public Node next;
public Object getVal() {
return val;
}
public void setVal(Object val) {
this.val = val;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
public Node(Object val) {
this.val = val;
}
}
class Test2
{
public static void main(String[] args) {
Node node1=new Node(1);
Node node2=new Node(2);
SingleLinkedList singleLinkedList=new SingleLinkedList();
singleLinkedList.insert(node1);
singleLinkedList.insert(node2);
singleLinkedList.display();
}
}
可参考:https://blog.csdn.net/qq_69133469/article/details/124312857 、 https://blog.csdn.net/u011723409/article/details/125456921
import java.util.Scanner;
public class SingleLinkedList<T> {
//结点定义
private class Node{
//数据
T item;
//指向下一个结点
Node next;
//构造器
public Node(T item,Node next){
this.item = item;
this.next = next;
}
public Node(T item){
this.item = item;
}
}
//头结点
private Node head;
//尾结点
private Node tail;
//结点个数
private int size;
//链表定义
public SingleLinkedList(){
this.head = new Node(null,null);
size = 0;
}
//查找特定位置的链表结点
public Node get(int index) {
if (index <0 || index >=this.size){
return null;
}else{
Node temp = this.head;
for(int i =1; i<= index; i++){
temp = temp.next;
}
return temp;
}
}
public void add(T data){
Node temp = new Node(data);
//链表为空时
if (this.size == 0){
head = temp;
tail = head;
}else{
Node last = tail;
last.next = temp;
this.tail = temp;
}
this.size ++;
}
//在链表的第i个位置插入一个值为t数据
public void insert(int index ,T data) throws Exception{
if(index <0 ||index > this.size){
throw new Exception("插入超出范围");
}else{
Node newNode = new Node(data);
//在头结点插入元素
if (index ==0){
if(this.size >0){
Node temp = head;
newNode.next = temp;
}
head = newNode;
}
//在尾结点插入元素
else if(index == this.size){
Node temp = tail;
temp.next = newNode;
this.tail = newNode;
}else{
//在中间插入元素
Node preNode = get(index-1);
Node nextNode = preNode.next;
newNode.next = nextNode;
preNode.next = newNode;
}
}
this.size ++;
if(size == 1){
tail = head;
}
}
//删除特定位置的数据
public void del(int index )throws Exception{
if (index <0 ||index >=this.size){
throw new Exception("删除超出范围");
}else{
//删除头结点
if (index == 0){
Node temp = this.head.next;
this.head = temp;
}else if(index == this.size-1){ //删除尾结点
Node preNode = get(index -1);
this.tail = preNode;
preNode.next = null;
}else{
//删除中间结点
Node preNode = get(index -1);
Node nextNode = preNode.next.next;
preNode.next = nextNode;
}
}
this.size --;
}
public void printLinkList(){
if(this.size ==0){
System.out.println("链表为空");
}
else {
Node temp = head;
System.out.print("目前的列表,头结点:" + head.item + ",尾结点:" + tail.item + ",整体:");
while (temp != null) {
System.out.print(temp.item + ",");
temp = temp.next;
}
System.out.println();
}
}
public static void main(String args[]) throws Exception {
SingleLinkedList linkList = new SingleLinkedList();
int[] numbers = new int[20];
Scanner scanner = new Scanner(System.in);
int num, i = 0;
while(scanner.hasNextInt())
{
num = scanner.nextInt();
if (num != 0)
{
numbers[i] = num;
i++;
}else{
break;
}
}
System.out.println(i);
for(int j=i-1; j>=0; j--)
{
System.out.println(numbers[j]);
linkList.add(numbers[j]);
}
linkList.printLinkList();
// 在指定索引插入值
int index_insert, insert_val;
Scanner scanner1 = new Scanner(System.in);
index_insert = scanner1.nextInt();
insert_val = scanner1.nextInt();
linkList.insert(index_insert, insert_val);
linkList.printLinkList();
// 删除指定索引位置的值
int del_index;
del_index = scanner1.nextInt();
linkList.del(del_index);
linkList.printLinkList();
// 获取指定索引位置的值
int find_index;
find_index = scanner1.nextInt();
int result = (int) linkList.get(find_index).item;
System.out.println(result);
}
}