【18. 在 O(1) 时间内删除链表节点】剑指offer-JAVA实现

258 阅读1分钟

题目描述

给头结点和要被删除的节点,在o1时间内删掉。

思路

正常删除On思路是从头开始遍历,找到就删。原因是节点没有向前指针,无法指向前一个节点。

O1思路是,要被删除的节点tar得next值赋予tar,并让tar指向tar的next的next,即删除tar.next这个节点。这是在节点不是最后一个位置的时候。 如果在最后一位,还是要正常遍历。

代码:

public class eighteen {
	class ListNode{
		int data;
		ListNode next;
	}
	
	public ListNode f(ListNode head,ListNode tar) {
		if(head==null||tar==null)
			return null;
		if(tar.next!=null) {
			tar.data = tar.next.data;
			tar.next = tar.next.next;
		}else {
			//只有一个节点
			if(head == tar)
				head = null;
			else {
				ListNode p=head;
				while(p.next.next!=null)
					p = p.next;
				p.next = null;
			}
			
			return head;
			 
		}
	} 
}

代码没有经过测试。