算法-链表-之删除链表的节点并返回头指针
1 /** 2 * struct ListNode { 3 * int val; 4 * struct ListNode *next; 5 * ListNode(int x) : val(x), next(nullptr) {} 6 * }; 7 */ 8 class Solution { 9 public: 10 /** 11 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 12 * 13 * 14 * @param head ListNode类 15 * @param val int整型 16 * @return ListNode类 17 */ 18 ListNode* deleteNode(ListNode* head, int val) { 19 // write code here 20 if(head==NULL) 21 { 22 return NULL; 23 } 24 if(head->val==val) 25 { 26 return head->next; 27 } 28 ListNode* p=head; 29 ListNode* q=p; 30 ListNode* temp=q; 31 while(p!=NULL) 32 { 33 if(p->val==val) 34 { 35 temp->next=temp->next->next; 36 37 return q; 38 } 39 else 40 { 41 temp=p; 42 p=p->next; 43 } 44 } 45 return q; 46 } 47 };
总结:整体思路就是遍历链表的时候,用一个temp保存前一个元素,如果没找到,继续保存,如果找到了,就用 temp->next=temp->next->next;跳过下一个节点,然后返回这个新的链表的头指针即可
主要为了自己学习