有两种思路:
思路一:首先遍历一遍链表,得到链表长度n,然后返回n-k+1个节点的数据域
思路二:定义两个指针p和q,都指向头节点的下一个节点,等到p移动到第k个节点,q和p同步移动,等到p移动到链表尾时,q指向的就是倒数第k个节点
思路一相当于遍历两遍链表,思路二则遍历了一遍链表,思路二更优
//找链表中倒数第k个位置上的节点,若查找成功,返回data域的值
//思路:首先遍历一遍链表,得到链表长度n,然后返回n-k+1个节点的数据域
public int searchK(LinkList L, int k){
int i=0;
Node p=L.head;
while(p!=null){
i++;
p=p.next;
}
p=L.head;
int j=0;
while(j<i-k){
p=p.next;
j++;
}
return p.data;
}
//思路二:定义两个指针p和q,都指向头节点的下一个节点,等到p移动到第k个节点,q和p同步移动,
//等到p移动到链表尾时,q指向的就是倒数第k个节点
public int searchK2(LinkList L, int k){
Node p=L.head.next;
Node q=L.head.next;
int i=0;
while(i<k){
i++;
p=p.next;
}
while(p!=null){
p=p.next;
q=q.next;
}
return q.data;
}
转载请注明原文地址: https://ju.6miu.com/read-1122745.html