关于链表的一些总结和代码,java实现
2015-10-08 15:07
726 查看
本人对链表这一部分内容掌握的一直不太好,现在总结如下,代码全部在myeclipse下运行通过
1、链表的创建,插入和删除,查找
class Lnode
{
private int val;
private Lnode next;
public int getVal() {
return val;
}
public void setVal(int val) {
this.val = val;
}
public Lnode getNext() {
return next;
}
public void setNext(Lnode next) {
this.next = next;
}
}
public class LinkList {
public Lnode head=new Lnode();
public void creatLinkList(int[] arr)
{
Lnode tail=head;
for(int i=0;i<arr.length;i++)
{
Lnode newNode=new Lnode();
newNode.setVal(arr[i]);
newNode.setNext(null);
tail.setNext(newNode);
tail=newNode;
}
}
//打印链表中数据
public void printlink()
{
Lnode ptr;//实例化一个节点
ptr=head.getNext();//该节点取得头结点的后继节点
while(ptr!=null){
System.out.print(ptr.getVal()+"->");
ptr=ptr.getNext();
}
System.out.println();
}
//插入数据
public void insertlink(int pos,int value){//两个参数,一个表示插入的位置,另一个表示插入的值
int index=0;
Lnode ptr;
Lnode pnew;//实例化新节点
ptr=head.getNext();
while(ptr!=null){
index++;
if(pos==index){
pnew=new Lnode();
pnew.setVal(value);
pnew.setNext(ptr.getNext());
ptr.setNext(pnew);
System.out.println("插入数据"+value+"成功!");
break;
}
else{
ptr=ptr.getNext();
}
}
if(ptr==null)
System.out.println("插入数据失败!");
}
//删除结点
public void deletelink(int value){
Lnode ptr=head.getNext();
Lnode p=head;
while(ptr!=null)
{
if(ptr.getVal()==value)
{
p.setNext(ptr.getNext());
System.out.println("删除数据"+value+"成功!");
break;
}
else
{
p=ptr;
ptr=ptr.getNext();
}
}
if(ptr==null){
System.out.println("链表中没有要删除的数据!");
}
}
//查找结点
public void seachlink(int value){
Lnode ptr;
ptr=head.getNext();
while(ptr!=null){//在节点非空的情况下寻找匹配的的值
if(value==ptr.getVal()){//匹配成功是
System.out.println("找到数据:"+ptr.getVal());
break;//退出循环
}
else{//当当前值不是要查找的值时,查找下一个
ptr=ptr.getNext();
}
}
if(ptr==null)//链表遍历完毕,没有找到时
System.out.println("链表中没有要查找数据");
}
public static void main(String args[])
{
int a[]={1,4,5,6,7};
LinkList list=new LinkList();
list.creatLinkList(a);
System.out.println(" 链表输出如下:");
list.printlink();
list.insertlink(2,100);
list.printlink();
list.deletelink(100);
list.printlink();
list.seachlink(7);
list.seachlink(100);
}
}
1、链表的创建,插入和删除,查找
class Lnode
{
private int val;
private Lnode next;
public int getVal() {
return val;
}
public void setVal(int val) {
this.val = val;
}
public Lnode getNext() {
return next;
}
public void setNext(Lnode next) {
this.next = next;
}
}
public class LinkList {
public Lnode head=new Lnode();
public void creatLinkList(int[] arr)
{
Lnode tail=head;
for(int i=0;i<arr.length;i++)
{
Lnode newNode=new Lnode();
newNode.setVal(arr[i]);
newNode.setNext(null);
tail.setNext(newNode);
tail=newNode;
}
}
//打印链表中数据
public void printlink()
{
Lnode ptr;//实例化一个节点
ptr=head.getNext();//该节点取得头结点的后继节点
while(ptr!=null){
System.out.print(ptr.getVal()+"->");
ptr=ptr.getNext();
}
System.out.println();
}
//插入数据
public void insertlink(int pos,int value){//两个参数,一个表示插入的位置,另一个表示插入的值
int index=0;
Lnode ptr;
Lnode pnew;//实例化新节点
ptr=head.getNext();
while(ptr!=null){
index++;
if(pos==index){
pnew=new Lnode();
pnew.setVal(value);
pnew.setNext(ptr.getNext());
ptr.setNext(pnew);
System.out.println("插入数据"+value+"成功!");
break;
}
else{
ptr=ptr.getNext();
}
}
if(ptr==null)
System.out.println("插入数据失败!");
}
//删除结点
public void deletelink(int value){
Lnode ptr=head.getNext();
Lnode p=head;
while(ptr!=null)
{
if(ptr.getVal()==value)
{
p.setNext(ptr.getNext());
System.out.println("删除数据"+value+"成功!");
break;
}
else
{
p=ptr;
ptr=ptr.getNext();
}
}
if(ptr==null){
System.out.println("链表中没有要删除的数据!");
}
}
//查找结点
public void seachlink(int value){
Lnode ptr;
ptr=head.getNext();
while(ptr!=null){//在节点非空的情况下寻找匹配的的值
if(value==ptr.getVal()){//匹配成功是
System.out.println("找到数据:"+ptr.getVal());
break;//退出循环
}
else{//当当前值不是要查找的值时,查找下一个
ptr=ptr.getNext();
}
}
if(ptr==null)//链表遍历完毕,没有找到时
System.out.println("链表中没有要查找数据");
}
public static void main(String args[])
{
int a[]={1,4,5,6,7};
LinkList list=new LinkList();
list.creatLinkList(a);
System.out.println(" 链表输出如下:");
list.printlink();
list.insertlink(2,100);
list.printlink();
list.deletelink(100);
list.printlink();
list.seachlink(7);
list.seachlink(100);
}
}
相关文章推荐
- Could not initialize class javax.crypto.JceSecurity
- java集合类TreeMap和TreeSet
- struts1和struts2的特点和区别
- Java线程同步:synchronized锁住的是代码还是对象
- spring mvc声明表结构
- Java 判断栈的push和pop序列是否一致
- Java的GUI编程之列表和组合框的设计使用
- java 逻辑运算符(&& || !)、位运算符(& | ~ …^)
- Struts2中iterator标签遍历map总结
- 在MyEclipse中使用ClearCase插件及遇到的问题
- Java 中的成员内部类
- Java中的静态内部类
- Java 中的方法内部类
- java 浮点数精度运算问题
- 下载和使用Spring Tool Suite (JAVA IDE)
- JMX和MBean以及pojo-mbean学习
- Java POI库使用学习
- jdbcType与javaType的对应关系
- Eclipse中java文件头注释格式设置
- Java____类、对象、实例____与前面赋值+顺序结合看