单链表的基本操作-Java实现

package ldm;
import java.util.*;
class Node<T> {
	T data;
	Node<T> next;
	public Node(Node<T> n){
		next=n;
	}
	public Node(T obj,Node<T> n){
		data=obj;
		next=n;
	}
	public T getData() {
		return data;
	}
	public Node<T> getNext(){
		return next;
	}
}
class linkList<T>{
	private Node<T> head;
	private int length;
	public linkList() {
		length=0;
		head=new Node<T>(null);
	}
	public Node<T> getHead(){
		return head;
	}
	public boolean add(T obj,int pos) {
		if(pos<1||pos>length+1) {
			System.out.println("pos值不合法");
			return false;
		}
		int num=1;
		Node<T>p=head,q=head.next;
		while(num<pos) {
			p=q;
			q=q.next;
			num++;
		}
		p.next=new Node<T>(obj,q);
		length++;
		return true;
	}
	public boolean isEmpty() {
		return length==0;
	}
	public T remove(int pos) {
		if(isEmpty()) {
			System.out.println("链表为空表");
			return null;
		}
		if(pos<1||pos>length+1) {
			System.out.println("pos值不合法");
			return null;
		}
		Node<T>p=head,q=head.next;
		int num=1;
		while(num<pos) {
			p=q;
			q=q.next;
			num++;
		}
		p.next=q.next;
		length--;
		return q.data;
	}
	public int find(T obj) {
		if(isEmpty()) {
			System.out.println("链表为空表");
			return -1;
		}
		int num=1;
		Node<T>p=head.next;
		while(p!=null) {
			if(p.data.equals(obj)) break;
			p=p.next;
			num++;
		}
		if(p==null) return -1;
		return num;
	}
	public T value(int pos) {
		if(isEmpty()) {
			System.out.println("链表为空表");
			return null;
		}
		if(pos<1||pos>length+1) {
			System.out.println("pos值不合法");
			return null;
		}
		int num=1;
		Node<T>p=head.next;
		while(num<pos) {
			p=p.next;
			num++;
		}
		return p.data;
	}
	public boolean modify(T obj,int pos) {
		if(isEmpty()) {
			System.out.println("链表为空表");
			return false;
		}
		if(pos<1||pos>length+1) {
			System.out.println("pos值不合法");
			return false;
		}
		int num=1;
		Node<T>p=head.next;
		while(num<pos) {
			p=p.next;
			num++;
		}
		p.data=obj;
		return true;
	}
	public int size() {
		return length;
	}
	public void nextOrder() {
		Node<T>p=head.next;
		while(p!=null) {
			System.out.println(p.data);
			p=p.next;
		}
	}
	public void clear() {
		length=0;
		head.next=null;
	}
}
public class Main {
	public static void main(String[] argc) {
		linkList<Integer>L=new linkList<Integer>();
		int a[]= {23,56,12,49,35};
		for(int i=0;i<a.length;i++) L.add(a[i],i+1);
		System.out.println("单链表中的数据元素为: ");
		L.nextOrder();
		L.add(30,4);
		System.out.println("执行插入操作后的单链表中的数据元素为: ");
		L.nextOrder();
		L.remove(5);
		System.out.println("执行删除操作后的单链表中的数据元素为: ");
	    L.nextOrder();
	    int i=L.find(12);
	    System.out.println("元素12在单链表中的位序为:"+i);
	}
}

猜你喜欢

转载自blog.csdn.net/qq_41061455/article/details/80815580
今日推荐