Loading

向有序的环形单链表中插入新节点

向有序的环形单链表中插入新节点

题目:向有序的环形单链表中插入新节点

《程序员代码面试指南》第29题 P87 难度:士★☆☆☆

最近事情有点多,今天暂时挑个简单的题做一下。。

这个题思路很简单,不过我忘记考虑链表为空的情况了。具体过程如下:

  1. 生成值为num新节点node
  2. 如果链表为空,让node自己组成环形单链表直接返回
  3. 链表不为空,则pre=headcur=head.next,然后同步移动下去。当num≥pre.value并且num≤cur.value时,将node插入pre和cur之间
  4. 遍历完成后(pre移动到尾结点,cur移动到头结点),如果都没有找到满足3中条件的节点,则说明num要么大于链表的所有值要么小于链表的所有值。此时直接插入head节点的前面即可。另外需要注意,如果num小于链表的所有值,即小于head.value,则需将node作为新的头结点返回

代码如下:

public Node insertNum(Node head, int num) {
  Node node = new Node(num);
  if (head == null) {
    node.next = node;
    return node;
  }
  Node pre = head;
  Node cur = head.next;
  while (cur != head) {
    if (pre.value <= num && cur.value >= num) {
      break;
    }
    pre = cur;
    cur = cur.next;
  }
  pre.next = node;
  node.next = cur;
  return head.value < num ? head : node;
}

(左神的代码比我的优美多了,确实得好好学习一下了┭┮﹏┭┮)

posted @ 2021-11-24 10:44  幻梦翱翔  阅读(45)  评论(0)    收藏  举报