鏈表中查找/刪除第K個元素

這類題的常見思路是設置兩個指針,開始都指向頭結點,第一個指針走K步后第二個指針再開始走,因為兩個指針中間隔著K步,所以,當第一個指針指向最后一個NULL時,第二個指針剛好指向鏈表倒數第K個元素。除了思路是關鍵點外,這類題的魯棒性是面試官考察的重點,具體是:1.輸入的n比整個鏈表還長;2.n=0;3.鏈表為空。這三點要處理好。

一.在鏈表中查找倒數第K個元素

/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) :
            val(x), next(NULL) {
    }
};*/
class Solution {
public:
    ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
       ListNode* head1 = pListHead;
        if(pListHead == NULL)
            return NULL;
        int i;
        for(i = 0; i <  k && head1 != NULL; i ++){
            head1 = head1 -> next;
        }

        if(head1 == NULL && i < k)//不存在倒數第k個元素
            return NULL;
        if(head1 == NULL && i == k)//第一個元素是第k個元素
           return pListHead;


        ListNode* temp = pListHead;
        while(head1){
            head1 = head1 -> next;
            temp = temp -> next;
        }
       
       return temp;
    }
};

二.在鏈表中刪除倒數第K個元素

刪除與查找倒數第K個元素的區別是查找需要定位到正好第K個元素,而刪除需要定位到第K個元素的前一個元素。因此,對于查找,兩個指針要相隔K個元素,而對于刪除,兩個元素要相隔k+1個元素.

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* removeNthFromEnd(ListNode* head, int n) {
        ListNode* head1 = head;
        int i;
        for(i = 0; i <=  n && head1 != NULL; i ++){
            head1 = head1 -> next;
        }
       
        if(head1 == NULL && i < n)//不存在倒數第n個元素
            return head;
        if(head1 == NULL && i == n)//第一個元素是第n個元素
           return head -> next;
        
       
        ListNode* temp = head;
        while(head1){
            head1 = head1 -> next;
            temp = temp -> next;
        }
       temp -> next = temp -> next -> next;
       return head;
    }
};
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 大學的時候不好好學習,老師在講臺上講課,自己在以為老師看不到的座位看小說,現在用到了老師講的知識,只能自己看書查資...
    和玨貓閱讀 1,482評論 1 3
  • 【聲明】歡迎轉載,但請保留文章原始出處→_→文章來源:http://www.lxweimin.com/p/08d08...
    夢工廠閱讀 3,787評論 3 31
  • 轉載請注明出處:http://www.lxweimin.com/p/c65d9d753c31 在上一篇博客《數據結構...
    Alent閱讀 3,536評論 4 74
  • 本文內容取自于小甲魚的數據結構與算法。http://www.lxweimin.com/p/230e6fde9c75 ...
    阿阿阿阿毛閱讀 2,930評論 0 7
  • 沉默,是不想過問,不想辯論,不想參與。也因為不想說,懶得說,不必說的狀態被形容成冰,冷的讓人無法靠近。是自我保護,...
    邢淺閱讀 136評論 0 1