您的位置:首页 > 其它

单链表基本操作的实现

2016-09-13 16:00 363 查看
package pac1;

class Node{
public Node next; //指针域
public int data; //数据域
public Node(int data) {
this.data = data;
}
public void show(){
System.out.print(data+" ");
}
}
public class LinkList {
public Node head; //头节点
public LinkList(){
this.head=null;
}
//插入一个头结点
public void addHeadNode(int data) {
Node node=new Node(data);
node.next=head;
head=node;
}
//头插法创建表,将新节点插入到头结点之后
public  void creatList1(LinkList L,int [] arr){
for(int i=0;i<arr.length;i++){
Node node=new Node(arr[i]); //创建一个新节点
node.next = head;
head = node;
}
}
//尾插法创建表
public  void creatList2(LinkList L,int [] arr){
addHeadNode(arr[0]);//将第一个元素作为头结点
Node rear=head;
for(int i=1;i<arr.length;i++){
Node node=new Node(arr[i]); //创建一个新节点
rear.next= node;
rear=node;
}
}
//根据序号查找节点的值
public int findNode(LinkList L,int i){
int j=0;
Node p=head;
while(p!=null&&j<i){
j++;
p=p.next;
}
return p.data;
}

//根据元素值查找序号
public int locateElem(LinkList L,int data){
Node p=head;
int i=0;
while(p!=null&&p.data!=data){
p=p.next;
i++;
}
return i;
}

//插入结点,将值为x的新节点插入到的第i个结点。思路:先找到第i-1个节点,在其后再插入新节点
public void addNode(LinkList L,int i,int data){
Node p=head;
int j=0;
Node s=new Node(data);
while(j<i-1){
p=p.next;
j++;
}
s.next=p.next;
p.next=s;
}

//删除节点,删除第i个节点。思路:先找到第i-1个节点,在其后再插入新节点
public void delNode(LinkList L,int i){
Node p=head;
int j=0;
while(j<i-1){
p=p.next;
j++;
}
p.next=p.next.next;
}

//显示表
public void showList(){
Node current=head;
while(current!=null){
current.show();
current=current.next;
}
System.out.println();
}

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int [] arr={1,2,3,4,5};
LinkList L=new LinkList();
L.creatList2(L, arr);
L.showList();
//		System.out.println(L.findNode(L, 2));
//		System.out.println(L.locateElem(L, 4));
L.addNode(L, 3, 6);
L.showList();
L.delNode(L, 3);
L.showList();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: