算法-链表-之删除链表的节点并返回头指针

 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;跳过下一个节点,然后返回这个新的链表的头指针即可

posted @ 2022-02-17 19:38  技术笔记记录  阅读(262)  评论(0)    收藏  举报