[关闭]
@w1024020103 2017-07-17T18:20:00.000000Z 字数 853 阅读 502

Insert into a Cyclic Sorted List

LintCode LinkedList


在此输入正文

这道题要向一个环形有序列表里面插入一个node,要满足插入后的List仍然有序。
我一开始不停地尝试curt, prev node怎么变化才能找到insert的位置,困于找得到newNode.next但不知道newNode前面的node怎么表示。然后却不懂得跳出来先从整体上看有哪些可能的位置可以插入。
实际上只有两种位置可以插入:

从整体上把握了哪些地方可以insert,就可以来遍历节点找到可以插入的地方:

  1. public class Solution {
  2. /**
  3. * @param node a list node in the list
  4. * @param x an integer
  5. * @return the inserted new list node
  6. */
  7. public ListNode insert(ListNode node, int x) {
  8. // Write your code here
  9. ListNode newNode = new ListNode(x);
  10. if (node == null){
  11. newNode.next = newNode;
  12. return newNode;
  13. }
  14. ListNode curt = node;
  15. ListNode prev = null;
  16. do {
  17. prev = curt;
  18. curt = curt.next;
  19. if (prev.val <= curt.val && (prev.val <= x && curt.val >= x)){
  20. break;
  21. }
  22. if (prev.val > curt.val && (x > prev.val || x < curt.val)){
  23. break;
  24. }
  25. } while (curt != node);
  26. newNode.next = curt;
  27. prev.next = newNode;
  28. return curt;
  29. }
  30. }

while和 do while的区别:

http://www.runoob.com/java/java-loop.html

image_1bl80vf8s54e1e591mlj7dn2md1t.png-49.8kB
image_1bl80u1dn1612cb0188q1a9f1e43m.png-56.8kB

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注