单链表的逆置
逆置原理:地址的交换
public Entry revers(){
Entry newHead = null;//定义一个新的头结点用来输出逆置后新的头结点
Entry prev = null;//定义一个前驱(为了达到逆置使前后结点的next逆置使用到)
Entry cur = head;//定义一个一定的头结点
while (cur!=null){
Entry curNext = cur.next;//把
if(curNext == null){
newHead = cur;
}
cur.next = prev;
prev = cur;
cur = curNext;
}
head = newHead;
return head;
}
单链表的倒数第K个元素的值
原理:求倒数第k,则设立一个k-1固定长度,使这个固定长度一直后移,直到固定长度的末端到达链表的末端,则固定长度的前端就是倒数第k个元素的位置
public int lastK(int k){
if(k<0||k>getLength()){//保证稳定性,判断倒数K是否在该链表长度范围之内
return -1;
}
Entry cur1 = head;
Entry cur2 = head;
while(k-1>0){//先使一个结点走K-1的长度,为了和前一个结点保持k-1个长度
if(cur2.next != null){
cur1 = cur2.next ;
--k;
}else{
return -1;
}
}
//保持K个长度后,两个节点同时一起走
while(cur2.next !=null){
cur1 = cur1.next;
cur2 = cur2.next;
}
if(cur2.next ==null ){//直到先走的结点指向null,则前一个结点指向的就是倒数第K个结点
return cur1.data ;
}else{
return -1;
}
}