您的位置:首页 > 编程语言 > Java开发

Java实现单链表的一些常用操作

2015-08-22 16:06 627 查看
一直没好好整理一下数据结构的东西,今天趁着有空,就用java实现了单链表结构的定义、创建等,希望对大家有帮助。

public class LinkedListTest {

//计算单链表的长度
public static int LenOfList(ListNode head)
{
if(head==null) return 0;
int count=0;
while(head.next!=null)
{
count++;
head=head.next;
}
return count;
}

//打印单链表
public static void displayList(ListNode head)
{
if(head==null) return;
ListNode p=head.next;
while(p!=null)
{
if(p.next!=null)
System.out.print(p.val+"->");
else
System.out.print(p.val+"");
p=p.next;
}
}

//头插法创建单链表
public static ListNode MakeListFromHead(int[] arr, int len)
{
if(len<=0) return null;
ListNode head=new ListNode(0);
ListNode tmp;
for(int i=0; i<len; i++)
{
tmp=new ListNode(arr[i]);
if(head.next==null)
head.next=tmp;
else
{
tmp.next=head.next;
head.next=tmp;
}
}
return head;
}

//尾插法建单链表
public static ListNode MakeListFromTail(int[] arr, int len)
{
if(len<=0) return null;
ListNode head=new ListNode(0);
ListNode tail=head;
ListNode tmp;
for(int i=0; i<len; i++)
{
tmp=new ListNode(arr[i]);
if(head.next==null)
{
tail=tmp;
head.next=tail;
}
else
{
tail.next=tmp;
tail=tmp;
}
}
return head;
}

//删除单链表中第i个节点,它的位序对应i-1
public static void DeleteIthNode(ListNode head, int i)
{
if(head==null) return;
if(i<1 i="">LenOfList(head))
throw new IndexOutOfBoundsException("索引越界");

int j=0;
ListNode pre=head.next;
if(i==1) head.next=head.next.next;
else
{
while(j!=i-2)
{
pre=pre.next;
j++;
}
pre.next=pre.next.next;
}
}

//将一个新节点插入到位序为i的位置上,注意i是位序
public static void InsertNode(ListNode head, int i, int newElement)
{
if(i<0 i="">LenOfList(head))
throw new IndexOutOfBoundsException("索引越界");

ListNode p=new ListNode(newElement);
if(head==null)
{
head.next=p;
}
else
{
int j=0;
ListNode tmp=head;

while(j!=i)
{
tmp=tmp.next;
j++;
}

p.next=tmp.next;
tmp.next=p;
}
}

//在单链表中搜索指定元素,若存在则返回该元素的位序,不存在就返回-1
public static int getIndexOfEle(int element, ListNode head)
{
if(head==null) return -1;
ListNode tmp=head.next;
int j=0;
while(tmp!=null)
{
if(tmp.val==element) return j;
else
{
tmp=tmp.next;
j++;
}
}

return -1;
}

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr = new int[10];
for(int i=0; i<10; i++)
arr[i]=i+1;

System.out.println("头插法创建单链表:");
ListNode linkList1=MakeListFromHead(arr,10);
displayList(linkList1);
System.out.println();

System.out.println("尾插法创建单链表:");
ListNode linkList2=MakeListFromTail(arr,10);
displayList(linkList2);
System.out.println();

System.out.println("求单链表linkList1的长度:");
System.out.println(LenOfList(linkList1)+"");

System.out.println("删除单链表linkList1中的第i个元素:");
DeleteIthNode(linkList1,5);
displayList(linkList1);
System.out.println();

System.out.println("在单链表linkList2中位序为i的位置插入一个新元素:");
InsertNode(linkList2,10,12);
displayList(linkList2);
System.out.println();

System.out.println("在单链表linkList2中寻找特定元素:");
System.out.println(getIndexOfEle(8,linkList2));
}

}

class ListNode{
public int val;
public ListNode next;
public ListNode(int val)
{
this.val=val;
this.next=null;
}
}
</0></1>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: