题目描述
给头结点和要被删除的节点,在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;
}
}
}