向有序的环形单链表中插入新节点
向有序的环形单链表中插入新节点
《程序员代码面试指南》第29题 P87 难度:士★☆☆☆
最近事情有点多,今天暂时挑个简单的题做一下。。
这个题思路很简单,不过我忘记考虑链表为空的情况了。具体过程如下:
- 生成值为num的新节点node
- 如果链表为空,让node自己组成环形单链表,直接返回
- 链表不为空,则pre=head,cur=head.next,然后同步移动下去。当num≥pre.value并且num≤cur.value时,将node插入pre和cur之间
- 遍历完成后(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;
}
(左神的代码比我的优美多了,确实得好好学习一下了┭┮﹏┭┮)

浙公网安备 33010602011771号