题目描述:
给定一个单链表中的一个等待被删除的节点(非表头或表尾)。请在在O(1)时间复杂度删除该链表节点。
class ListNode(object):
def __init__(self, val, next=None):
self.val = val
self.next = next
class solution:
def delete_node(self,node):
temnode=node.next
node.value=temnode
node.next=temnode.next
将需要删除的节点curent_node的val和curent_node.next.val交换,然后使curent_node指向curent_node.next.next
class ListNode(object):
def __init__(self, val, next=None):
self.val = val
self.next = next
class solution:
def delete_node(self,node):
if node.next!=None:
temnode=node.next
node.value=temnode
node.next=temnode.next
else if self.head==node: #删除头结点(链表只有一个节点)
node=None
self.head=None
else: #删除最后一个节点#
node_=self.head
next_=node_.next
if next_.next !=node:
node_=next_
next_=next_.next
else:
node_.next=None
考虑了,最后一个节点和头节点的情况。代码没测试。
第二小题;删除链表中重复的结点
题目描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
# -*- coding:utf-8 -*-
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def deleteDuplication(self, pHead):
# write code here
if pHead==None or pHead.next ==None:
return pHead
new_head=ListNode(-1) #指向头节点的node,但是为什么这么定??
new_head.next=pHead
prev = new_head
curr = pHead
nex=None
while curr!=None and curr.next!=None:
nex=curr.next
if curr.val==nex.val:
while nex!=None and nex.val ==curr.val:
nex=nex.next #重复节点 第二个替换第一个
prev.next=nex
curr=nex
else:
prev=curr
curr=curr.next
return new_head.next
链表编程和思维全面性