数据结构与算法|Java实现单链表

来源:互联网 发布:软件开发工程师学习 编辑:程序博客网 时间:2024/05/16 12:58

单链表:用一组任意的存储单元来存储线性表的数据单元,这组数据可以是连续的,也可以是不连续的。

单链表的数据元素构成:数据内容+下一组数据存储的位置信息。(数据域+指针域)

下图为一组简单的链表存储结构:


如图,每一组单元数据都包含数据域与指针域部分,数据域保存着当前数据单元所存储的数据信息,指针域保存着下一数据单元的地址信息,在链表遍历中可以通过指针域的信息查找下一组数据信息。

一.添加数据

如果是在链表的末尾直接添加数据,可以通过遍历链表找到链表的末尾,然后再添加新的内容,以下的内容可以找到链表的末尾:

while(node->next != null){current = current.next;}

如果是在指定的位置上添加新的元素,则需要调整链表中单元的位置。


例如在上图的位置中插入一个元素(node),就要用过以下的方式实现:

Node node = new Node();node.next = left.next;(right)left.next = node;


二.删除数据

删除数据的原理如同上图添加数据,也是要通过调整链表位置来实现。

如果要删除上图的right元素:

left.next = right.next;


用java实现单链表的代码:

class Node{private int data;private Node next;private Node head = null;public Node(){}public Node(int data){this.data = data;}public void init(int data){Node node = new Node(data);//node为链头,next为空node.next = head;//将node赋值给头headhead = node;}//在链表尾部加入数据public void add(int data){//要加入的数据Node node = new Node(data);//链头Node current = head;while(current.next != null){current = current.next;}current.next = node;}public void insert(int data, int index){int i = 0;Node node = new Node(data);//当前位置的结点Node current = head;//指定位置前的链表Node previous = head;//index位置后插入while(index != i){previous = current;current = current.next;i++;}node.next = current;previous.next = node;}//删除链表index位置上的元素public void delete(int index){int i = 1;Node current = head;Node previous = head;while(index != i){previous = current;current = current.next;i++;}previous.next = current.next;}//查找index位置上的元素public int find(int index){int i = 1;Node current = head;Node previous = head;while(index != i){previous = current;current = current.next;i++;}return current.data;}public void displayAll(){Node node = head;while(node != null){System.out.print(node.data+"->");node = node.next;}}}public class LinkListDemo01 {public static void main(String args[]){Node node = new Node();node.init(1);node.insert(2, 1);node .insert(3, 1);node.insert(4, 1);node.displayAll();System.out.println();node.add(5);node.displayAll();System.out.println();node.delete(3);node.displayAll();System.out.println();System.out.println(node.find(2));}}

运行结果:

1->4->3->2->1->4->3->2->5->1->4->2->5->4




0 0
原创粉丝点击