链表中查找/删除第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,486评论 1 3
  • 【声明】欢迎转载,但请保留文章原始出处→_→文章来源:http://www.jianshu.com/p/08d08...
    梦工厂阅读 3,790评论 3 31
  • 转载请注明出处:http://www.jianshu.com/p/c65d9d753c31 在上一篇博客《数据结构...
    Alent阅读 3,541评论 4 74
  • 本文内容取自于小甲鱼的数据结构与算法。http://www.jianshu.com/p/230e6fde9c75 ...
    阿阿阿阿毛阅读 2,946评论 0 7
  • 沉默,是不想过问,不想辩论,不想参与。也因为不想说,懒得说,不必说的状态被形容成冰,冷的让人无法靠近。是自我保护,...
    邢浅阅读 136评论 0 1