重学数据结构--单链表

现在程序开发过程中,如果需要用到链表这种逻辑存储关系的集合,都直接试用jdk自带的linkedList集合就可以满足业务需要了,但最近在重新回顾数据结构的时候发现数据结构教材中的代码示例大部分都是用C实现的,所以就想把课程中用到的示例代码翻译成java语言。在复习单链表过程中,跟着教材敲单链表的定义和插入及删除元素时,才发现真正在实现单链表这种数据结构时其实需要考虑的细节还是挺多的,这个示例也是在参考jdk包中的LinkedList的实现实现过程写出来的,可以理解成既是一个重新学习数据结构的过程也是学习jdk自带底层jar包逻辑的过程。示例代码中定义了三个类,分别是Node节点类、测试启动类、SingleList单链表类,只实现了部分方法,具体细节在jdk自带的LinkedList中实现了更多的方法,可以好好学习一下。

package dataStructure;
public class SingleListTest {
   public static void main(String args[]) {
	   /*
	    * 定义四个节点,分别是1,2,3,4
	    */
	   Node node1 = new Node(1);
	   Node node2 = new Node(2);
	   Node node3 = new Node(3);
	   Node node4 = new Node(4);
	   SingleList list = new SingleList();
	   list.addNode(node1);
	   list.addNode(node2);
	   list.addNode(node3);
	   list.addNode(node4);
	   /*
	    * 插入node
	    */
	   Node node5 = new Node(5);
	   list.insertNode(node5, 1);
	   /*
	    * 删除node
	    */
	   list.deleteNode(2);
	   System.out.println("success!!!!");
   }
}
package dataStructure;
/*
 * 单链表的元素节点包括两个部分,一个是元素对象本身,一个是指向下一个节点的元素
 */
public class SingleList {
	int size = 0;
	Node first = new Node();// 第一个节点
	Node last;// 最后一个节点
	// 在第i个元素位置添加一个新的节点
	public void insertNode(Node node, int i) {
		Node tempNode = first;
		Node nextNode = first.next;
		for (int k = 1; k <= i; k++) {
			if (k == i) {
				Node newTemp = tempNode.next;
				tempNode.next = node;
				node.next = newTemp;
				if (i == size) {
					last = node;
				}
				size++;
			} else {
				tempNode = nextNode;
				nextNode = tempNode.next;
			}
		}
	}
	// 删除第i个元素节点
	public void deleteNode(int i) {
		Node preNode = first;
		Node tempNode = first.next;
		for (int k = 1; k <= i; k++) {
			if (k == i) {
				if (i == size) {
					preNode.next = null;
					last = preNode;
				} else {
					preNode.next = tempNode.next;
				}
				size--;
			} else {
				preNode = tempNode;
				tempNode = tempNode.next;
			}
		}
	}
	// 构造单链表
	public void addNode(Node node) {
		if (size == 0) {
			first.next = node;
			last = node;
		} else {
			Node temp = last;
			last = node;
			temp.next = node;
		}
		// 添加元素成功,则size加1
		size++;
	}
	
}
package dataStructure;
public class Node {
	  int data;//数据本身
	  Node next;//下一个节点
	  public Node(int data) {
		  this.data = data;
	  }
	  public Node(int data,Node next) {
		  this.data = data;
		  this.next = next;
	  }
	public Node() {
		// TODO Auto-generated constructor stub
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sunny_daily

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值