向升序排列的单链表中插入一个值,要求插入后仍为升序链表

今天看书时看到单链表的插入操作,觉得这种思想不错,故mark一下。


介绍:已有一个链表,链表是按值的升序链接而成的。现要插入一个值,也就是新增一个节点,而且要求插入后链表仍为升序排列的。


直接上代码:


typedef struct _Node{
	int 			value;
	struct	_Node	*link;
}Node;
int list_insert(Node** linkp,int value)
{
	register Node* current;
	register Node* new;
	//寻找准确的插入位置
	while((current=*linkp)!=NULL)&¤t->value<value)
		linkp = &t->link;

	new	= (Node*)malloc(sizeof(Node));
	if(new == NULL)
		return false;
	new->value = value;

	new->link	= current;
	*linkp		= new;
	return true;
}

说明下,这儿传入的参数是头节点的地址,而不是头节点,这点主要是针对当插入的数时最小的情况,当插入的值比已有链表中所有的值都小时,就得修改头节点,这时就只有传入指针的指针,也就是头结点的地址。

另外一个就是这里面没移动一次节点,都取了当前节点地址来赋值给linkp,这也是针对头结点这个特殊节点来的,以为我们插入一个节点,就是要找到插入点的上一个节点的link,而这个link可能是普通节点的link,也有可能是头结点,

linkp = &t->link;

就是来抽象这两种不同的情况,把这情况的节点的属性都看成一种节点。

reference:《C和指针》

  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值