读书笔记-链表问题(一)

问题描述:找到链表的倒数第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);

猜你喜欢

转载自blog.csdn.net/u012149181/article/details/80052097
今日推荐