【Everyday】(10)在O(1)时间复杂度删除链表节点 - Everyday - SegmentFault



【Everyday】(10)在O(1)时间复杂度删除链表节点 - Everyday - SegmentFault

给定一个单链表中的表头和一个等待被删除的节点(非表头或表尾)。请在在O(1)时间复杂度删除该链表节点。并在删除该节点后,返回表头。

样例
给定 1->2->3->4,和节点 3,返回 1->2->4

解题思路

这个题目在解决的时候的常规思路是从头开始遍历找到这个节点,同时保留其前面的一个节点,然后将其前面的节点指向后一个节点,然后将这个节点置为null即可,但是这种方式的复杂度是O(n),我们要在O(1)的复杂度内解决该问题,需要我们直接通过给定的节点,然后找到其后面的一个节点,然后将后面的节点复制过来,然后使的其当前的下一个指向指向其后一个节点的指向即可。

实现代码

public void deleteNode(ListNode node) { // write your code here if(node==null) return; if(node.next==null) node = null; else if(node.next!=null){ node.val = node.next.val; node.next = node.next.next; } }

优化与思考

代码看起来比较简洁,但是涉及到类似于指针的问题,在其指向上很容易出现一些问题,这里在写的时候,想到了要将其中的一个节点释放掉,结果释放了一个有用的节点,导致出现了问题。涉及类似指针指向的问题多加小心。


Read full article from 【Everyday】(10)在O(1)时间复杂度删除链表节点 - Everyday - SegmentFault


No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts