微软面试100题-60

来源:互联网 发布:js读取手机本地文件 编辑:程序博客网 时间:2024/05/17 07:54


60.在O(1)时间内删除链表结点(链表、算法)。

题目:给定链表的头指针和一个结点指针,在O(1)时间删除该结点。链表结点的定义如下:

struct ListNode

{

      int        m_nKey;

      ListNode*  m_pNext;

};

函数的声明如下:
void DeleteNode(ListNode* pListHead, ListNode* pToBeDeleted);

分析:这是一道广为流传的Google面试题,能有效考察我们的编程基本功,还能考察我们的反应速度,

更重要的是,还能考察我们对时间复杂度的理解。

package com.interview.algorithm;import com.interview.algorithm.PrintLinkReverse.LinkNode;public class DeleteLinkNode {public class LinkNode{int value;LinkNode next;public LinkNode(int value, LinkNode next){this.value = value;this.next = next;}}public void deleteNode(LinkNode head, LinkNode toBeDeleted){if(head == toBeDeleted){head = head.next;System.out.println("Delete successful");}else{if(this.findNode(head, toBeDeleted))System.out.println("Delete successful");}}public boolean findNode(LinkNode curr, LinkNode toBeDeleted){if(curr.next!=null){if(curr.next == toBeDeleted){curr.next = curr.next.next;return true;}else{if(this.findNode(curr.next, toBeDeleted))return true;}}return false;}public static void main(String[] args) {// TODO Auto-generated method stubDeleteLinkNode delete = new DeleteLinkNode();DeleteLinkNode.LinkNode tail = delete.new LinkNode(1, null);DeleteLinkNode.LinkNode node1 = delete.new LinkNode(2, tail);DeleteLinkNode.LinkNode node2 = delete.new LinkNode(3, node1);DeleteLinkNode.LinkNode node3 = delete.new LinkNode(4, node2);DeleteLinkNode.LinkNode head = delete.new LinkNode(5, node3);delete.deleteNode(head, head);}}

0 0
原创粉丝点击