什么是单链表
链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。
Java内部也有自己的链表–LinkedList,感兴趣的可以去看一下,我们今天是自己来创建一个单链表然后来进行简单的基本操作 首先我们来定义一个类然后在建立他的一个内部类来作为我们的链表实现类
class Linked
{
private Object value;
private Linked next;
private Linked upper;
public Linked getUpper() {
return upper;
}
public void setUpper(Linked upper) {
this.upper = upper;
}
public Linked() {
}
public Object getValue() {
return value;
}
public void setValue(Object value) {
this.value = value;
}
public Linked(Object value) {
this.value = value;
}
public Linked getNext() {
return next;
}
public void setNext(Linked next) {
this.next = next;
}
@Override
public String toString() {
return "[Value:"+value+"]";
}
}
这样我们的一个链表的设计就算完成了
之所以定义内部类而不是自己定义一个类是因为我们可以把类来作为一个存放方法和全局变量的这么一个地方
public class Linkedlist
{
public static Linked linked;
public static int index;
public Linked getLinked() {
return linked;
}
public void setLinked(Linked linked) {
Linkedlist.linked = linked;
}
public Linkedlist() {
}
public Linkedlist(Linked linked) {
Linkedlist.linked = linked;
}
class Linked
{
private Object value;
private Linked next;
private Linked upper;
public Linked getUpper() {
return upper;
}
public void setUpper(Linked upper) {
this.upper = upper;
}
public Linked() {
}
public Object getValue() {
return value;
}
public void setValue(Object value) {
this.value = value;
}
public Linked(Object value) {
this.value = value;
}
public Linked getNext() {
return next;
}
public void setNext(Linked next) {
this.next = next;
}
@Override
public String toString() {
return "[Value:"+value+"]";
}
}
}
然后我们在进行添加和输出在进行链表的一个基本操作
package com0811;
public class Linkedlist
{
public static Linked linked;
public static int index;
public Linked getLinked() {
return linked;
}
public void setLinked(Linked linked) {
Linkedlist.linked = linked;
}
public Linkedlist() {
}
public Linkedlist(Linked linked) {
Linkedlist.linked = linked;
}
class Linked
{
private Object value;
private Linked next;
private Linked upper;
public Linked getUpper() {
return upper;
}
public void setUpper(Linked upper) {
this.upper = upper;
}
public Linked() {
}
public Object getValue() {
return value;
}
public void setValue(Object value) {
this.value = value;
}
public Linked(Object value) {
this.value = value;
}
public Linked getNext() {
return next;
}
public void setNext(Linked next) {
this.next = next;
}
@Override
public String toString() {
return "[Value:"+value+"]";
}
}
public void add(Object v)
{
Linked newLinked = new Linked(v);
Linked linked = Linkedlist.linked;
if (linked==null)
{
Linkedlist.linked =newLinked;
return;
}
adddnext(linked,newLinked);
addupper(linked.next,linked);
}
private void addupper(Linked next,Linked linked)
{
if (next.upper==null)
{
next.upper=linked;
}else
{
addupper(next.next,next);
}
}
private void adddnext(Linked linked, Linked newList)
{
if (linked.next==null)
{
linked.next=newList;
}else
{
adddnext(linked.next,newList);
}
}
@Test
public void gettoString(Linked linked)
{
if (linked!=null)
{
System.out.println(linked+"->");
gettoString(linked.next);
index++;
if (linked.next==null&&linked.upper!=null)
{
getupper(linked);
}
}
}
@Test
public void addspin(Linked linked)
{
if (linked!=null)
{
addspin(linked.next);
if (linked.next==null)
{
linked.next=Linkedlist.linked;
}
}
}
@Test
private void getupper(Linked upper)
{
if (upper!=null)
{
System.out.println("<--"+upper);
getupper(upper.upper);
}
}
@Test
public Linked zjwz(Linked linked)
{
Linked linked1 = linked.next.next;
return zjwz1(linked1,linked.next);
}
private Linked zjwz1(Linked linked1, Linked linked2)
{
if (linked1!=null&&linked1.next!=null)
{
linked2 = zjwz1(linked1.next.next,linked2.next);
}
return linked2;
}
@Test
public Boolean spin(Linked linked,Linked linked1)
{
Boolean blew = false;
if (linked==linked1&&linked.next!=null)
{
return true;
}else
{
blew = spin(linked.next.next,linked1.next);
}
return blew;
}
@Test
public void addzhidingwz(int idx,Object v)
{
if (idx == 0)
{
Linked linked1 = new Linked();
linked1.value= linked.value;
linked1.next= linked.next;
linked.value=v;
linked.next=linked1;
}else
{
Linked newList = new Linked(v);
adddigui1(idx,newList,linked);
index=0;
}
}
private void adddigui1(int idx, Linked newList,Linked linked)
{
++index;
if (idx==index)
{
Linked zuo = linked.upper;
zuo.next=newList;
newList.upper=zuo;
newList.next = linked;
linked.upper = newList;
}else
{
if (linked.next!=null)
{
adddigui1(idx,newList,linked.next);
}else
{
linked.next=newList;
newList.upper = linked;
}
}
}
@Test
public void sc(int idx ,Linked linked)
{
index=0;
shanchu(idx,linked.next);
}
private void shanchu(int idx,Linked linked)
{
++index;
if (idx==index)
{
Linked zuo = linked.upper;
zuo.next=linked.next;
linked.next.upper=zuo;
}else
{
if (linked.next!=null)
{
shanchu(idx,linked.next);
}
}
}
@Test
public Linked getxzhuan(Linked linked)
{
Linked linked1 = new Linked();
linked1.next=Linkedlist.linked;
Linked pre = new Linked();
pre = linked1.next;
Linked con = new Linked();
con = pre.next;
return getxzhuan1(con,linked1,pre);
}
private Linked getxzhuan1(Linked com,Linked linked1,Linked pre)
{
if (com!=null)
{
pre.next = com.next;
com.next = linked1.next;
linked1.next = com;
getxzhuan1(pre.next,linked1,pre);
}
return linked1;
}
}
|