c_cpp 19.从列表末尾删除第N个节点 - 中 - 2018.8.7

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 19.从列表末尾删除第N个节点 - 中 - 2018.8.7相关的知识,希望对你有一定的参考价值。

/**
1:找第 n 个节点
2:两个指针,一个从起点出发,一个从第 n 个节点处出发,第 2 个指针到 NULL 的时候,第一个指针就是要移除的节点
3:移除节点为第一个节点的时候,需要返回的是第二个节点或者 NULL(只有一个节点)
 */
 
class Solution {
public:
    ListNode* removeNthFromEnd(ListNode* head, int n) {
        // 找第 n 个节点
        ListNode *nextHead = head;
        while(nextHead
              && n>1) {
            nextHead = nextHead->next;
            n--;
        }
        // 如果没有找到对应节点就直接返回了
        if (nextHead == NULL) return head;
        // 两个指针,一个从起点出发,一个从第 n 个节点处出发
        ListNode *preNode = NULL;
        ListNode *curNode = head;
        while(nextHead->next != NULL) {
            preNode = curNode;
            curNode = curNode->next;
            nextHead = nextHead->next;
        }
        // preNode 为空意味着移除节点为第一个节点
        if (preNode == NULL) {
            return curNode->next;
        }
        // 移除指定的节点
        preNode->next = curNode->next;
        return head;
    }
};

以上是关于c_cpp 19.从列表末尾删除第N个节点 - 中 - 2018.8.7的主要内容,如果未能解决你的问题,请参考以下文章

java 19.从列表末尾删除第N个节点(#)。java

java 19.从列表末尾删除第N个节点(#)。java

java 19.从列表末尾删除第N个节点(#)。java

java 19.从列表末尾删除第N个节点(#)。java

java 19.从列表末尾删除第N个节点(#)。java

java 19.从列表末尾删除第N个节点(#)。java