leetcode[206]:反转链表 C语言解法

本文介绍了一种使用迭代方法来反转单链表的算法实现。输入一个单链表的头结点,通过修改每个节点的next指针,使其指向其前一个节点,从而实现链表的反转。最终返回反转后的链表头结点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

反转一个单链表。

示例:

输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL

进阶:
你可以迭代或递归地反转链表。你能否用两种方法解决这道题

 

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* reverseList(struct ListNode* head)
{
    struct ListNode* head_new = NULL;
    struct ListNode* node = head;
    
    if(head == NULL || head->next == NULL)
    {
        return head;
    }
    
    while(node != NULL)
    {
         struct ListNode* temp;
         temp = node->next;
         node->next = head_new;
         head_new   = node;
         node = temp;
    }
    
    
    return head_new;
    
}

 

解决LeetCode第160题“相交链表”时,核心在于理解和应用链表的基本概念以及指针操作。以下是详细的思路和代码实现: 参考资源链接:[C语言实现LeetCode第160题:寻找相交链表](https://wenku.csdn.net/doc/81s0uqqkqy) 1. 确认链表结构:首先,你需要定义链表节点的数据结构,通常在C语言中使用结构体来表示链表节点,如: ```c struct ListNode { int val; struct ListNode *next; }; ``` 2. 确认相交条件:链表相交意味着存在某个节点,它是两个链表共有的。相交节点之后的所有节点在内存中的地址都是相同的。 3. 算法思路:对于两个链表,计算它们的长度,然后同步遍历,使得较长链表的指针先走len差值步,之后两个指针同时移动,如果相等则为相交点。如果没有交点,两个指针最终都会指向NULL。 4. 代码实现:基于以上思路,下面给出C语言实现的示例代码: ```c struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) { struct ListNode *l1 = headA, *l2 = headB; int len1 = 0, len2 = 0; // 计算两个链表的长度 while (l1 != NULL) { len1++; l1 = l1->next; } while (l2 != NULL) { len2++; l2 = l2->next; } l1 = headA; l2 = headB; // 长链表先移动len差值步 if (len1 > len2) { for (int i = 0; i < len1 - len2; i++) { l1 = l1->next; } } else { for (int i = 0; i < len2 - len1; i++) { l2 = l2->next; } } // 同步移动并寻找相交点 while (l1 != NULL && l2 != NULL) { if (l1 == l2) { return l1; // 找到相交节点 } l1 = l1->next; l2 = l2->next; } return NULL; // 未找到相交节点 } ``` 5. 调试和优化:在实际开发中,使用调试工具检查逻辑错误,优化代码效率。例如,在相交链表问题中,可以使用额外的空间(如哈希表)来记录节点,但要权衡空间复杂度。 解决此问题的推荐资源《C语言实现LeetCode第160题:寻找相交链表》将详细说明上述过程,并提供代码示例,帮助你更好地理解和实现。 在深入学习和实践了相交链表问题之后,为了进一步提升编程技能,可以探索更多LeetCode题目的C语言解法,如链表反转、排序,以及复杂数据结构的操作。通过实际编写代码和分析算法,可以有效提高解决实际编程问题的能力。 参考资源链接:[C语言实现LeetCode第160题:寻找相交链表](https://wenku.csdn.net/doc/81s0uqqkqy)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值