剑指offer面试题18:删除链表的节点;(java实现)

题目一:在O(1)时间内删除链表节点。

给定单向链表的头指针和一个节点指针,定义在一个函数在O(1)时间内删除该节点。链表节点与函数的定义如下:

class ListNode{

int value;

ListNode next;

    ListNode(int value){

    this.value = value;

   }

}

上代码:

public class sortArrayByOddEven {  //需要额外定义一个类ListNode题目有给出
	public static void main(String[] args) {

		ListNode pHead = new ListNode(1);   
		ListNode pAhead = new ListNode(3);
		ListNode pBhead = new ListNode(5);
		ListNode pChead = new ListNode(7);
		pHead.next = pAhead;
		pAhead.next = pBhead;
		pBhead.next = pChead;
		deleteNode(pHead,pBhead);
		while (pHead != null) {
			System.out.print(pHead.value + ",");
			pHead = pHead.next;
		}

	}

	private static void deleteNode(ListNode pHead, ListNode pBhead) {
		if(pHead==null||pBhead==null)  //当头指针为空,或者删除节点为空时
			return ;
		ListNode pNode = pHead;        
		if(pNode.next==null) {            
			while(pNode.next!=pBhead) {
				pNode = pNode.next;
			}
			pNode.next = null;
		}else {               //我们直接让删除节点的值等于删除节点的下一个节点值
             //再将删除节点的next赋值为 deleNode(删除节点).next.next 起到间接删除的效果
                    
			pBhead.value = pBhead.next.value;
			pBhead.next = pBhead.next.next;
		}
	}	
}

分析:对数据进行鲁棒性,安全性检查不再分析;

1)当删除节点.next不存在时:

我们就必须循环所有的节点,知道找出删除节点的上一个节点,来进行删除。

2)当删除节点(deleteNode).next 存在时;

我们只需要将删除节点 的下一个节点替换为删除节点即可;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值