无头指针删除链表中的节点
要求:请编写一个函数,用于 删除单链表中某个特定节点 。在设计函数时需要注意,你无法访问链表的头节点 head ,只能直接访问 要被删除的节点 。题目数据保证需要删除的节点 不是末尾节点 。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
void deleteNode(struct ListNode* node) {
struct ListNode *pone = NULL; //初始化一个临时结构体指针
struct ListNode *ponedelete = NULL; //初始化一个要删除的结构体指针
pone = node; //将要删除的节点赋值给pone,但实际上我们要删除的是下一个节点
ponedelete = pone -> next ; //我们将要原本要删除的节点的后一个节点赋给ponedelete
pone -> val = ponedelete -> val ; //然后把原本要删除的节点的后一个节点的val值赋值给原本要删除的节点的val
pone -> next = ponedelete -> next; //然后把原本要删除的节点的后一个节点指向的地址赋值给原本要删除的节点,至此,就建立了一个新的链了
free(ponedelete); //释放内存
}
这道题比较好玩,没有头指针,因为是单向链表,回不去删除节点的前一节点,所以我们可以把要删除节点的后一节点复制给原本要删除的节点,然后把后一节点删除即可。(有点绕口)