链表相关算法

1、反转链表。

ListNode* reverseList(ListNode* head) {
        //设置3个指针,pre用于修改指针方向,temp用于保存原链表下一个节点的位置
        ListNode* cur=head;
        ListNode* pre=NULL;
        ListNode* temp;
        while(cur)
        {
            temp = cur->next;
            cur->next = pre;
            //后移
            pre = cur;
            cur = temp;
        }
        return pre;
    }

2、计算单链表长度

int getListlength(NODE* head)
{
	NODE* slow = head;
	NODE* fast = head;
	while (fast!=NULL&&fast->next!=NULL)  //fast指针每次跳2格
	{
		slow = slow->next;
		fast = fast->next;
		if (slow == fast)
			return;
	}
	if (fast != NULL || fast->next != NULL)   //没有环的情况
	{
		int len = 0;
		NODE* p = head;
		while (p!=NULL)
		{
			len++
			p = p->next;
		}
		return len;
	}
	else
	{
		int len1 = 0;//链表开始到环入口的长度
		int len2 = 0;//环的长度
		NODE* p1 = slow;
		NODE* p2 = head;
		while (p1!=p2)   //
		{
			p1 = p1->next;
			p2 = p2->next;
			len1++;
		}
		while (slow)
		{
			slow = slow->next;
			len2++;

		}
		return len1 + len2;
	}
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值