链表的操作

     对于链表有很多其他的操作,如对链表中的数据进行排序,对单向链表的结点逆置,判断一个链表是否是循环链表等等。

    首先我们先解决对链表中的数据进行排序的问题,链表中只有一个数据还好办,直接交换元素即可,可是链表中的数据域不一定只有一个元素,而且数据类型如果是Object类也有点复杂,要首先转换成String类型,然后强制转换成int类型才能进行比较。

                /**
		 * 链表的排序方法
		 */
		public void sort(){
			Node node=head;
			while(node !=null){
			Node node1=node.next;
			while(node1!=null){
				if(node.a<node1.a){
					int temp=node.a;
					node.a=node1.a;
					node1.a=temp;
				}
				node1=node1.next;
			}
			node=node.next;
			}
			}

 接下来是链表的逆置问题

                /**
		 * 链表的逆置
		 */
		public void inverse(){
			Node node=head;
			Node node1=last.next;
			Node node2=node.next;
			while(node2!=null){
				node.next=node1;
				node1=node;
				node=node2;
				node2=node2.next;
			}
			 node.next=node1;
		} 

 其中head是头结点,last是尾结点。

判断链表中是否有环,可以设置两个指针,fast和slow,链表遍历中,fast一次走两步,即fast=fast.next.next,而slow走一步,即slow=slow.next,如果链表中有环,必定slow 和fast会相遇

具体方法如下:

/**
		 * 判断一个链表是否有环
		 * 
		 */
		public boolean isLoop(){
			Node fast=head;
			Node slow=head;
			while(fast!=null&&fast.next!=null){
				slow=slow.next;
				fast=fast.next.next;
				if(slow==fast)
					return false;
			}
			return true;
			
		}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值