标签:删除结点 某个结点 java数据结构 java单链表 链表删除结点
题目:删除带头结点的单链表L中的结点p,p不是最后一个结点,要求时间复杂度为O(1)。现在要求时间复杂度为O(1),因为p不是最后一个结点,知道结点p我们可以删除p的后继结点,那么我们可以把p的后继结点元素的值赋给p结点元素的值。
ADT定义:
//单链表的结点类
class LNode{
//为了简化访问单链表,结点中的数据项的访问权限都设为public
public int data;
public LNode next;
}public class LinkListUtli {
public static void deleteNode(LNode p)
{
if(p==null||p.next==null) return;//如果p为空或为单链表中最后一个结点不符合题意,直接返回
LNode q=p.next;//q为p的后继结点
p.data=q.data;
p.next=q.next;//从单链表中删除结点q
}
}public class LinkListUtli {
public static void deleteNode(LNode L,LNode p)
{
if(p==null||L==null) return;//如果p为空或单链表L为空不符合题意,直接返回
if(p.next != null) //如果p不是最后一个结点
{
LNode q=p.next;//q为p的后继结点
p.data=q.data;
p.next=q.next;//从单链表中删除结点q
}
else //如果p是最后一个结点
{
LNode pre=L;//用pre表示p的前驱结点
while(pre.next != null) //保持pre有后继结点
{
if(pre.next==p)//如果pre是p的前驱结点
{
pre.next=p.next;//将结点p从单链表中删除
}
}
}
}
}标签:删除结点 某个结点 java数据结构 java单链表 链表删除结点
原文地址:http://blog.csdn.net/lavor_zl/article/details/42803431