//判断单链表是否有环:思路:设置两个"指针",一个走一步,一个走两步,若存在环,则一定会存在有相交的位置点
public boolean isLoop(Linklist LNode){
Node p=head.next;
Node q=head.next.next;
for(;p!=null;p=p.next){
for(;q!=null;q=q.next){
if(p.equals(q)){
return true;
}
}
}
return false;
}
//输出单链表中倒数第K个结点
public void getNode(int K){
int size=getLength();
int count=0;
if(K<0 || K>size){
System.out.println("要求输出的位置不合法!");
}
Node p=head;
for(;p.next!=null;p=p.next){
if(size-count==K){
System.out.println(p.vlaue);
}
count++;
}if(size-count==K){
System.out.println(p.vlaue);
}
}
//如果存在两个链表相交的情况,找出相交的结点 *****
public void getIntersection(Node head1,Node head2){
if(head1==null || head2==null){
return ;
}
Node p=head1;
Node q=head2;
int size1=0;
for(;p.next!=null;p=p.next){
size1++;
}
int size2=0;
for(;q.next!=null;q=q.next){
size2++;
}
int diff=0;
if(size1 > size2){
p=head1;
q=head2;
diff=size1-size2;
}else{
p=head2;
q=head1;
diff=size2-size1;
}
for(int i=0;i<diff;i++){
p=p.next;
}
while(p!=null && q!=null){
if(p.vlaue==q.vlaue){
System.out.println(p.vlaue);
}
p=p.next;
q=q.next;
}
}
//单链表的逆置 *****
public void reverse(){
if(head.next==null || head.next.next==null){
return ;
}
Node p=head.next;
Node q=p.next;
Node s=q.next;
p.next=null;
q.next=p;
if(s!=null) {
p = q;
q = s;
s = s.next;
while (q.next != null) {
q.next = p;
p = q;
q = s;
s = s.next;
}
q.next=p;
}
head.next=q;
}