1. 程式人生 > 其它 >向有序的環形單鏈表中插入新節點

向有序的環形單鏈表中插入新節點

向有序的環形單鏈表中插入新節點

題目:向有序的環形單鏈表中插入新節點

《程式設計師程式碼面試指南》第28題 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;
}

(左神的程式碼比我的優美多了,確實得好好學習一下了┭┮﹏┭┮)