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,直到后指针到了最后,此时前指针的位置就是要返回的头节点的位置

浙公网安备 33010602011771号