如何实现单链表的增删操作
2017-07-27 17:56
806 查看
链表作为最基础的数据结构,在程序设计中具有非常重要的作用,起存储特点如下:可以用任意一组存储单元来存储单链表中的数据元素(存储单元可以是不连续的),而且,除了存储每个数据元素ai 外,还必须存储指示其直接后继元素的信息,这两部分信息组成的数据元素aI 的存储映像成为结点。N个结点连接在一块被称为链表,当结点只包含其后继结点的信息的链表就被称为单链表,如下图所示.
在java 语言中可定义如下数据类来存储信息结点信息。
class Node{
Node next=null;
int data;
public Node(int a){
this.data=a;
}
}
链表最重要的操作就是对链表的插入和删除元素。
单链表的插入操作是将值为X的新结点插入到单链表的第i个结点的位置
下面给出操作链表的操作示例Java代码:
class Node{
Node next=null;
int data;
public Node(int a){
this.data=a;
}
}
public class test3 {
static Node head=null;
/**
* 插入节点
* @param a
*/
public void addNode(int a){
Node newNode = new Node(a);
if(head==null){
head=newNode;
return;
}
Node tmp=head;
while(tmp.next!=null){
tmp=tmp.next;
}
tmp.next=newNode;
}
/**
* 删除节点
* @param i
* @return
*/
public boolean deleteNode(int i){
if(i<0 && i>getLength()-1){
return false;
}
int index=1;
Node preNode=head;
Node cuurenNode=head.next;
while(i>index){
preNode=cuurenNode;
cuurenNode=cuurenNode.next;
index++;
}
preNode.next=cuurenNode.next;
return true;
}
/**
* 获取链表长度
* @return
*/
public int getLength(){
int length=0;
Node tmp=head;
if(tmp!=null){
tmp=head.next;
length++;
}
return length;
}
/**
* 打印节点
*/
public static void println(){
Node tmp=head;
while(tmp!=null){
System.out.println(tmp.data);
tmp=tmp.next;
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
test3 test =new test3();
test.addNode(1);
test.addNode(2);
test.addNode(3);
test.addNode(4);
test.addNode(5);
println();
test.deleteNode(1);
println();
}
}
在java 语言中可定义如下数据类来存储信息结点信息。
class Node{
Node next=null;
int data;
public Node(int a){
this.data=a;
}
}
链表最重要的操作就是对链表的插入和删除元素。
单链表的插入操作是将值为X的新结点插入到单链表的第i个结点的位置
下面给出操作链表的操作示例Java代码:
class Node{
Node next=null;
int data;
public Node(int a){
this.data=a;
}
}
public class test3 {
static Node head=null;
/**
* 插入节点
* @param a
*/
public void addNode(int a){
Node newNode = new Node(a);
if(head==null){
head=newNode;
return;
}
Node tmp=head;
while(tmp.next!=null){
tmp=tmp.next;
}
tmp.next=newNode;
}
/**
* 删除节点
* @param i
* @return
*/
public boolean deleteNode(int i){
if(i<0 && i>getLength()-1){
return false;
}
int index=1;
Node preNode=head;
Node cuurenNode=head.next;
while(i>index){
preNode=cuurenNode;
cuurenNode=cuurenNode.next;
index++;
}
preNode.next=cuurenNode.next;
return true;
}
/**
* 获取链表长度
* @return
*/
public int getLength(){
int length=0;
Node tmp=head;
if(tmp!=null){
tmp=head.next;
length++;
}
return length;
}
/**
* 打印节点
*/
public static void println(){
Node tmp=head;
while(tmp!=null){
System.out.println(tmp.data);
tmp=tmp.next;
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
test3 test =new test3();
test.addNode(1);
test.addNode(2);
test.addNode(3);
test.addNode(4);
test.addNode(5);
println();
test.deleteNode(1);
println();
}
}
相关文章推荐
- 如何实现单链表的增删操作
- 如何实现单链表的增删操作
- 单链表的增删查改等操作实现
- 如何通过Mybatis实现数据的增删改查(CRUD)操作?
- 基于单链表的列表基本操作 类C语言实现
- 如何实现每天定时对数据库的操作
- 如何在DataGrid控件中实现编辑、删除、分类以及分页操作
- 如何实现每天定时对数据库的操作
- 市面上所有号称"虚拟机","防火墙"的实时监控杀毒软件无一不是使用的IFSHOOK技术.但是同时也有一些朋友不断写MAIL给我打听如何实现读写的监控.下面给出用VTOOLSD写的代码.也就是所有实时杀毒软件的奥秘.同时,很多拦截文件操作的软件,例如对目录加
- 如何在asp.net页面上放置的控件上实现左右键菜单,同时对之操作(1)
- 如何在DataGrid控件中实现编辑、删除、分类以及分页操作
- 在WPF中如何实现列表控件的拖拽操作
- 最近被一个问题困扰着,如何实现类似Photoshop的多层图像操作,每层可单独操作,又可以组合显示出来。
- 如何实现快速地从超大数据库中提取数据并进行相关的操作
- 如何实现对XML文件的增加、删除和修改操作
- 如何使用c语言实现双向链表的插入删除操作
- 如何在DataGrid控件中实现编辑、删除、分类以及分页操作
- 如何在DataGrid控件中实现编辑、删除、分类以及分页操作
- 如何在DataGrid控件中实现编辑、删除、分类以及分页操作
- 如何在DataGrid控件中实现编辑、删除、分类以及分页操作