链表中环的入口结点
一个链表中包含环,请找出该链表的环的入口结点。
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public ListNode EntryNodeOfLoop(ListNode pHead)
{
if(pHead == null || pHead.next == null)
return null;
ListNode p1 = pHead;
ListNode p2 = pHead;
while(p2 != null && p2.next != null ){
p1 = p1.next;
p2 = p2.next.next;
if(p1 == p2){
p2 = pHead;
while(p1 != p2){
p1 = p1.next;
p2 = p2.next;
}
if(p1 == p2)
return p1;
}
}
return null;
}
}
删除链表中重复的结点
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public ListNode deleteDuplication(ListNode pHead)
{
ListNode result;
ListNode temp=pHead;
ListNode index=new ListNode(1);
index.next=pHead;
result=index;
while(temp!=null){
if(temp.next!=null&&temp.next.val==temp.val){
while(temp.next!=null&&temp.next.val==temp.val){
temp=temp.next;
}
temp=temp.next;
index.next=temp;
}
else{
index=index.next;
temp=temp.next;
}
}
return result.next;
}
}
二叉树的下一个结点
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
/*
public class TreeLinkNode {
int val;
TreeLinkNode left = null;
TreeLinkNode right = null;
TreeLinkNode next = null;
TreeLinkNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public TreeLinkNode GetNext(TreeLinkNode pNode)
{
if(pNode==null)return null;
if(pNode.right!=null)
{
pNode=pNode.right;
while(pNode.left!=null)
{
pNode=pNode.left;
}return pNode;
}
while(pNode.next!=null)
{
if(pNode.next.left==pNode)return pNode.next;
pNode=pNode.next;
}
return null;
}
}