基于Python和C++实现删除链表的节点
给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。
返回删除后的链表的头节点。
示例1:
输入:head=[4,5,1,9],val=5
输出:[4,1,9]
解释:给定你链表中值为5的第二个节点,那么在调用了你的函数之后,该链表应变为4->1->9.
示例2:
输入:head=[4,5,1,9],val=1
输出:[4,5,9]
解释:给定你链表中值为1的第三个节点,那么在调用了你的函数之后,该链表应变为4->5->9.
思路:
建立一个空节点作为哨兵节点,可以把首尾等特殊情况一般化,且方便返回结果,使用双指针将更加方便操作链表。
Python解法:
classListNode: def__init__(self,x): self.val=x self.next=None classSolution: defdeleteNode(self,head:ListNode,val:int)->ListNode: tempHead=ListNode(None)#构建哨兵节点 tempHead.next=head prePtr=tempHead#使用双指针 postPtr=head whilepostPtr: ifpostPtr.val==val: prePtr.next=postPtr.next break prePtr=prePtr.next postPtr=postPtr.next returntempHead.next
C++解法:
structListNode{ intval; ListNode*next; ListNode(intx):val(x),next(NULL){} }; classSolution{ public: ListNode*deleteNode(ListNode*head,intval){ ListNode*tempHead=newListNode(-1);//哨兵节点,创建节点一定要用new!!!!!!!!!!!!!! tempHead->next=head; ListNode*prePtr=tempHead; ListNode*postPtr=head; while(postPtr){ if(postPtr->val==val){ prePtr->next=postPtr->next;//画图确定指针指向关系,按照箭头确定指向 break; } postPtr=postPtr->next; prePtr=prePtr->next; } returntempHead->next; } };
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。