删除链表中重复的结点
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表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
# 添加头节点,以防前两个结点就相同;pre指针指向当前确定不重复的那个结点,last指针相当于工作指针,一直往后面搜索
if not pHead or not pHead.next:
return pHead
head=ListNode(0)
head.next=pHead
pre=head
last=head.next
while last:
if last.next and last.val==last.next.val:
while last.next and last.val==last.next.val:
last=last.next
pre.next=last.next
last=last.next
else:
pre=pre.next
last=last.next
return head.next
二叉树的下一个结点
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
# -*- coding:utf-8 -*-
# class TreeLinkNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
# self.next = None
class Solution:
def GetNext(self, pNode):
# write code here
# 如果有右子树,则下一个结点是右子树第一个左叶子结点,如果没有左叶子结点,则返回最上层右结点
if pNode.right:
node=pNode.right
while node.left:
node=node.left
return node
# 如果没有右子树,则要寻找当前节点为左孩子时的父结点
while pNode.next:
if pNode.next.left==pNode:
return pNode.next
pNode=pNode.next
# 若当前结点没有父结点,则返回空
return None