Leetcode,leetcodeoj
Algorithm: Iterate and copy the original list first. For the random pointer, just copy the value from the original list first. And use a map to store each node's old address and its corresponding new address. After the iteration, we can replace the value of the random pointer based on the map we get.
Mistakes I make:
(1) Beware when head == null.
(2) Forget during the iteration: node = node.next;
public class Solution { public RandomListNode copyRandomList(RandomListNode head) { if(head == null) return null; RandomListNode newHead = new RandomListNode(head.label); newHead.random = head.random; RandomListNode node = newHead; Map<RandomListNode,RandomListNode> addrRef = new HashMap<RandomListNode,RandomListNode>(); addrRef.put(head, node); head = head.next; while(head != null) { RandomListNode tnode = new RandomListNode(head.label); tnode.random = head.random; node.next = tnode; addrRef.put(head, tnode); head = head.next; node = tnode; } node = newHead; while(node != null) { node.random = addrRef.get(node.random); node = node.next; } return newHead; }}
leetcode 是什東東有點不懂
裡面有很編程多面試的題目,可以線上編譯運行。難度比較高。如果自己能都做出來,對面大公司很有協助。我就是做的那裡的題目。
leetcode oj提交代碼方式是怎的?
不能寫main函數,你需要的是按照class Solution給的介面來實現它的一個成員函數
給一個參考答案
#include <sstream>using namespace std;class Solution {public: void reverseWords(string &s) { string ans = "", temp; stringstream sin(s); while(sin >> temp) { if(ans != "") { ans = temp + " " + ans; } else { ans = temp; } } s = ans; }};