📄 uselinklist.java
字号:
public class UseLinkList //定义主类
{
public static void main(String args[])
{
LinkList list = new LinkList(-1); //创建链表,含有一个节点
for(int i=0;i<10;i++)
{
list.insertAtBegin(i); //向空链表中插入10个节点
System.out.println(list.visitAllNode());//每插入一次,遍历链表
}
list.insertAfterId(37,6); //在指定位置处插入,插在数据6的后面
System.out.println(list.visitAllNode());//遍历并显示插入操作后的各节点
list.insertAfterId(-1,3); //在指定位置处插入,插在数据3的后面
System.out.println(list.visitAllNode());
if(list.removeAtId(4)) //删除链表中的指定节点
System.out.println(list.visitAllNode());
else
System.out.println("链表中不存在这个数据");
list.removeAll(); //删除整个链表
System.out.println(list.visitAllNode());
}
}
//--------------------------------------------------------------------
class Node //定义单链表节点类
{
private int m_Data; //节点中保存的数据
private Node m_Next; //节点中的指针属性,指向下一个Node对象的对象引用
Node(int data) //构造函数
{
m_Data = data;
m_Next = null;
}
Node(int data,Node next) //构造函数
{
m_Data = data;
m_Next = next;
}
void setData(int data) //修改节点中的数据
{
m_Data = data;
}
int getData() //获得节点中的数据
{
return m_Data;
}
void setNext(Node next) //修改节点中的指针
{
m_Next = next;
}
Node getNext() //获得节点中的指针指向的对象引用
{
return m_Next;
}
}
//------------------------------------------------------------------
class LinkList //定义链表类
{
Node m_FirstNode; //链表中的第一个节点
LinkList() //构造函数1:建立空链表
{
m_FirstNode = null;
}
LinkList(int data) //构造函数2:建立只有一个节点的链表
{
m_FirstNode = new Node(data);
}
String visitAllNode() //遍历链表的每个节点,将所有数据串成一个字符串
{
Node next = m_FirstNode; //从第一个节点开始
String s = "";
while(next!=null) //直到最后一个节点
{
s = s + next.getData() + "; ";
next = next.getNext(); //next指向下一个节点
}
return s;
}
void insertAtBegin(int data) //将数据data的节点插入在整个链表的前面
{
if(m_FirstNode == null) //对于空链表,直接插入
m_FirstNode = new Node(data);
else //把新节点插在第一个节点前面,并指向原来的第一节点
m_FirstNode = new Node(data,m_FirstNode);
}
void insertAfterId(int data,int id)
{ //将数据data插在包含数据id的节点后面,若链表中没有id,则插在整个链表最后
Node next = m_FirstNode;
if(next == null) //对于空链表,直接插入
m_FirstNode = new Node(data);
else
{
while(next.getData()!=id && next.getNext()!=null)
next = next.getNext(); //找到合适的插入位置
next.setNext( new Node(data,next.getNext()) );
}
}
boolean removeAtId(int id) //删除链表中第一个数据为id的节点
{
Node ahead = m_FirstNode; //前面的节点
Node follow = ahead; //指向ahead的节点
if(ahead == null) //链表为空,删除失败
return false;
else if(ahead.getData()==id) //第一个节点就是欲删除节点
{
m_FirstNode = m_FirstNode.getNext(); //删除成功
return true;
}
else
{
ahead = ahead.getNext(); //第二个节点
while(ahead!=null)
{
if(ahead.getData()==id) //找到匹配的节点
{
follow.setNext(ahead.getNext());
return true; //删除成功
}
follow = ahead; //下移一步,检查下一个节点
ahead = ahead.getNext();//follow跟在ahead后面
}
return false;
}
}
void removeAll() //删除所有的节点,令链表为空
{
m_FirstNode = null;
}
} //链表类定义结束
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -