读书笔记-链表问题(一)
问题描述:找到链表的倒数第n个结点
只用一次(链表)扫描就解决问题
思路:使用两个指针pNthNode和pTemp。首先两个指针都指向链表的表头结点。仅当pTemp(沿着链表)进行了n次移动后,pNthNode才开始移动。然后两个指针同时移动直至pTemp到达表尾。这时pNthNode指针所指向的结点就是所求结点,也就是链表的倒数第n个结点。
代码实现:
ListNode NthNodeFromEnd(ListNode head,int NthNode){
ListNode pTemp = head, pNthNode = null;
for(int count = 1; count < NthNode; count++ ){
if(pTemp != null)
pTemp = pTemp.getNext();
}
while(pTemp != null){
if(pNthNode == null){
pNthNode = head;
}else{
pNthNode = pNthNode.getNext();
}
pTemp = pTemp.getNext();
}
if(pNthNode != null)
return pNthNode;
return null;
}
时间复杂度为O(n),空间复杂度是O(1);