(Java) 单链表的增删改查和冒泡排序

首先是单链表的结点对象的创建和增删改查的方法的实现



public class Linklist {

	public Node head;
	public int length=0;
	
	//打印链表
	public void printlinklist(){
		Node p = head;
		while(p!=null){
			System.out.println(p.data);
			p = p.next;
		}
		System.out.println("长度为:"+length);
	}
	//判断链表是否为空
	public Boolean isEmpty(){
		if(head==null)
			return true;
		return false;
	}
	//尾插法添加结点
	public void addLastNode(int data){
		Node x = new Node(data);
		if(head==null){
			head=x;
			length++;
			return;
		}
		Node q=head;
		while(q.next!=null)
			q=q.next;
		q.next =x;
		length++;
	}
	//头插法添加结点
	public void addHeadNode(int data){
		Node x = new Node(data);
		if(head==null){
			head = x;
			length++;
			return;
		}
		x.next = head;
		head = x;
		length++;
	}
	//删除节点
	public Boolean deleteNode(int index){
		if(index<1||index>length)
			return false;
		int i=1;
		Node p=head;
		while(i!=(index-1)){
			p=p.next;
			i++;
		}
		p.next = p.next.next;
		length--;
		return true;
	}
	
	//修改结点
	public Boolean updateNode(int index, int data){
		if(index<1||index>length)
			return false;
		int i=1;
		Node p =head;
		while(i<index){
			p=p.next;i++;}
		p.data=data;
		return true;
	}
	//向前冒泡,因为冒泡是相邻俩俩进行比较,所以容易知道,当
	//一轮排序发现顺序
	public void SortLinklist(){
		
		Boolean flag = false;
		Node p = head;
		Node q = null;
		for(int i=0;i<length-1;i++){
			q=p.next;
			for(int j=i;j<length-1;j++){
				if(p.data>q.data){
					int t = p.data;
					p.data = q.data;
					q.data = t;
					flag=true;
				}
				q=q.next;
			}
			if(flag==false)
				break;
			flag=false;
			p = p.next;
		}
	}
}

class Node{
	public Node next;
	public int data;
	public Node(int data){
		this.data = data;
	}
}

单链表的冒泡排序 (Java)


public class MylinkedList {

	public Linklist linklist = new Linklist();
	
	public void testaddLastNode(){
		linklist.addLastNode(12);
		linklist.addLastNode(32);
		linklist.addLastNode(42);
		linklist.addLastNode(21);
		linklist.addLastNode(62);
		linklist.addLastNode(72);
		linklist.printlinklist();
	}
	
	public void testaddHeadNode(){
		
		linklist.addHeadNode(12);
		linklist.addHeadNode(22);
		linklist.addHeadNode(33);
		linklist.addHeadNode(24);
		linklist.addHeadNode(25);
		linklist.addHeadNode(26);
		linklist.printlinklist();

	}
	
	public void testdeleteNode(){
		if(linklist.deleteNode(3)==false)
			System.out.println("删除位置有误");
		linklist.printlinklist();
	}
	
	public void testUpdateNode(){
		if(linklist.updateNode(2, 10)==false)
			System.out.println("there is a mistake in the place of deletion");
		linklist.printlinklist();
		
	}
	public void testSortLinkList(){
		linklist.SortLinklist();
		linklist.printlinklist();
	}
	public static void main(String[] args) {

		MylinkedList m = new MylinkedList();
		m.testaddLastNode();
		m.testaddHeadNode();
		System.out.println("== === === === === === ");
		m.testSortLinkList();
	}

}

对于Java里的链表结点的删除,Java与c/c++的最大不同在于Java不用手动进行删除结点的释放空间,这是由于Java有自动处理垃圾的机制gc.

猜你喜欢

转载自blog.csdn.net/qq_23031939/article/details/81951441