Java与数据结构(1)——单链表

Java与数据结构(1)——单链表

第一次写博客,也是因为正在学习数据结构的原因,记录下自己的学习成果,希望自己能够坚持下来。

1、单链表是一种链式存取的数据结构,用一组连续的地址存储线性表中的数据。单链表中的数据通常用结点表示,结点通常包含:data(用来存储数据)和 next(指向下一个结点)。
Java与数据结构(1)——单链表
2、开始结点无前趋,故应设头指针head指向开始结点。终端结点无后继,故终端结点的指针域为空,即NULL。
3、在插入结点时通常有两种方式:尾插法和头插法。根据不同的操作选择不同方法,可以提高工作效率(我下面只实现了尾插法),也可以指定位置插入。

package List;

public class singleList {
public Node head ;// 声明头节点
private int length = 0;

public singleList() {// 构造方法,给头节点head赋空
	this.head = null;
}

class Node{
		int data;//节点数据
		Node next;//指向下一个节点
	public Node(int data) {//构造方法,给data赋值
		this.data = data;
	}
}

/*
 *添加节点 
 */
public void addNode(int data){
	Node temp = new Node(data);
	if(head==null){//判断是否为第一个节点
		head=temp;
		length++;
		return;
	}
	Node temp1=head;
	while(temp1.next!=null)
		temp1=temp1.next;
	temp1.next =temp;
	length++;
}

/*
 * 插入到指定位置
 */
public void addNodeindex(int index,int data) {
	if(index < 1 && index > length+1  ) {//判断插入位置		
		System.out.println("插入位置错误");
		return;
	}
	Node node = new Node(data);
	Node temp = head;
	for(int i=0;i<=length;i++) {
	
		if(i==index) {	//插入新节点
			node.next = temp.next;
			temp.next = node;
			length += 1;//链表长度加1
		}
}
	temp = temp.next;
	
}

/**
 * 删除指定节点
 */
public void delNode(int index) {
	if(index < 1||index > length) {
		System.out.print("指定节点不存在");
		return;
	}
	Node temp = head;
	for(int i=1;i<=length;i++) {
		if(i == index-1) {
			temp.next = temp.next.next;//使前一个节点指向下一个节点
			length -= 1;  //链表长度减一
			return;
		}
		temp = temp.next;
	}
}

/**
 * 对链表进行冒泡排序
 */
public void bubbleSortNode() {
	if(length < 2) {
		System.out.print("当前链表无需排序");
	}
	//冒泡排序
	Node temp1 = head;
	Node temp2 = null;
	for(int i=0;i<length-1;i++) {
		temp2 = temp1.next;
		for(int j=0;j<length-i-1;j++) {
			if(temp1.data > temp2.data) {
				//交换两个节点数据值
				int temp = temp1.data;
				temp1.data = temp2.data;
				temp2.data = temp;
			}
			temp2 = temp2.next;
		}
		temp1 = temp1.next;
	}
}

/**
 * 单链表的选择排序
 */
public void selectSort() {
	if(length < 2) {
		System.out.print("节点少于两个");
		return;
	}
	Node temp = head;
	while(temp.next != null) {
		Node secondTemp = temp.next;
		while(secondTemp != null) {
			if(temp.data < secondTemp.data) {
				int constantTemp = secondTemp.data;
				secondTemp.data = temp.data;
				temp.data = constantTemp;
			}
			secondTemp = secondTemp.next;
		}
		temp = temp.next;
	}
}
/*
 * 打印输出
 */
public void printNode() {
	Node temp = head;
	
	while(temp != null) {
		System.out.print(temp.data+"\t");
		temp = temp.next;
	}
	System.out.println();
}

public static void main(String args[]) {
	singleList list = new singleList();
	list.addNode(5);
	list.addNode(3);
	list.addNode(4);
	list.addNode(1);
	list.addNode(2);
	System.out.print("链表数据"+"\n");
	list.printNode();
	System.out.print("指定添加一个节点"+"\n");
	list.addNodeindex(2, 6);
	list.printNode();
	System.out.print("冒泡排序"+"\n");
	list.bubbleSortNode();
	list.printNode();
	System.out.print("选择排序"+"\n");
	list.selectSort();
	list.printNode();
	System.out.print("指定删除一个节点"+"\n");
	list.delNode(4);
	list.printNode();
}
}

实验结果:
Java与数据结构(1)——单链表
由于第一次写没有经验,文章若有错误的地方,请大家指正。