标签:删除结点 某个结点 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