lintcode_372. Delete Node in a Linked List

lintcode

372. Delete Node in a Linked List

描述:
给定一个单链表中的一个等待被删除的节点(非表头或表尾)。请在在O(1)时间复杂度删除该链表节点。

样例:
Linked list is 1->2->3->4, and given node 3, delete the node in place 1->2->4

/**
 * Definition for ListNode.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int val) {
 *         this.val = val;
 *         this.next = null;
 *     }
 * }
 */

思路1:常规方法从表头开始遍历,找到待删除节点则删除,时间复杂度O(n),且该题未给出表头元素。
思路2:将待删除节点的下一个节点的值赋给待删除节点,并且删除下一个节点,时间复杂度O(1),且不需要给出表头元素(若删除的元素是尾元素则没法通过这种办法删除,则必须从头遍历链表删除)

思路2代码如下:

public class Solution {
    /*
     * @param node: the node in the list should be deletedt
     * @return: nothing
     */
    public void deleteNode(ListNode node) {
        // write your code here
        if(node == null || node.next == null)
            return;
        node.val = node.next.val;  //赋值
        node.next = node.next.next; //将待删除的下一个节点删除
    }
}

你可能感兴趣的:(lintcode,数据结构)