day11

1.剑指 Offer 18. 删除链表的节点

 1 /**
 2  * Definition for singly-linked list.
 3  * struct ListNode {
 4  *     int val;
 5  *     ListNode *next;
 6  *     ListNode(int x) : val(x), next(NULL) {}
 7  * };
 8  */
 9 class Solution {
10 public:
11     ListNode* deleteNode(ListNode* head, int val) {
12       if(head -> val == val) return head -> next;
13       ListNode *p = head,*pre;
14       while(p){
15           if(p -> val == val)
16            break;
17           pre = p;
18           p = p -> next;
19       }
20       pre -> next = pre -> next -> next;
21       return head;
22     }
23 };

2.剑指 Offer 22. 链表中倒数第 k 个节点

 1 /**
 2  * Definition for singly-linked list.
 3  * struct ListNode {
 4  *     int val;
 5  *     ListNode *next;
 6  *     ListNode(int x) : val(x), next(NULL) {}
 7  * };
 8  */
 9 class Solution {
10 public:
11     ListNode* getKthFromEnd(ListNode* head, int k) {
12       ListNode *p = head;
13       int cnt = 0;
14       while(p){
15           cnt ++;
16           p = p -> next;
17       }
18       cnt = cnt - k;
19       for(int i = 0;i < cnt;i ++)
20        head = head -> next;
21       return head;
22     }
23 };

 还可用前后指针,指针间距离为k,直到后指针到了最后,此时前指针的位置就是要返回的头节点的位置

posted @ 2022-07-07 17:39  balabalahhh  阅读(42)  评论(0)    收藏  举报