题目:
给定一个单链表中的表头和一个等待被删除的节点(非表头或表尾)。请在在O(1)时间复杂度删除该链表节点。并在删除该节点后,返回表头。
样例
给定 1->2->3->4,和节点 3,返回 1->2->4。
解题:
方法好贱,先把要删除节点后面一个节点的值赋给删除节点,这样需要删除节点就删除了,再把删除节点指向删除节点后面节点的节点
就像这样:
node.val = node.next.val;
node.next = node.next.next;
Java程序:
/** * Definition for ListNode. * public class ListNode { * int val; * ListNode next; * ListNode(int val) { * this.val = val; * this.next = null; * } * } */ public class Solution { /** * @param node: the node in the list should be deleted * @return: nothing */ public void deleteNode(ListNode node) { // write your code here if(node==null) return; node.val = node.next.val; node.next = node.next.next; } }
总耗时: 2447 ms
Python程序:
""" Definition of ListNode class ListNode(object): def __init__(self, val, next=None): self.val = val self.next = next """ class Solution: # @param node: the node in the list should be deleted # @return: nothing def deleteNode(self, node): # write your code here if node==None: return node.val = node.next.val node.next = node.next.next
总耗时: 312 ms