c语言数据结构,leetcode题

img


反转链表
1.头节点head给了cur指针,再建立一个新的链表newhead,再用next存储head下一个结点~此时,struct listnode*next=cur->next,在这里我有一个疑问,因为这个链表没有头节点,头指针里边就是第一个元素地址,那cur->next就是第一个结点,但是next应该保存的是第二个结点,我的理解有错,哪里出错了呢
2.头插开始后,newhead = cur,这不是
迭代,这究竟怎么理解,cur看成什么

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    回答:

    1. 如果链表没有头节点,则cur应该指向第一个节点。当你将head赋值给cur时,cur指向了第一个节点,而不是头节点。因此,如果你要将第一个节点作为新链表的头节点,可以将cur赋值给newhead,然后将cur向后移动一位以获取下一个节点。在这种情况下,cur->next将是下一个节点的地址。

    对于代码中的“next”指针,它应该被定义为指向链表中当前节点的下一个节点的指针。因此,如果你正在处理第一个节点,那么“next”指针应该指向第二个节点的地址。

    1. 在插入头节点时,newhead = cur将cur指向的节点作为新链表的头节点。而cur在一开始将head赋值给自己,因此在第一次迭代中,cur指向的是头节点。然后,将cur向后移动一位以获取下一个节点,并将新节点添加到新链表中。如此反复进行,直到遍历完整个链表。

    示例代码:

    struct ListNode* reverseList(struct ListNode* head){
        struct ListNode *cur, *newhead;
    
        if(head == NULL){
            return NULL;
        }
    
        cur = head->next;
        newhead = head;
        newhead->next = NULL;
    
        while(cur != NULL){
            struct ListNode *tmp = cur->next;
            cur->next = newhead;
            newhead = cur;
            cur = tmp;
        }
    
        return newhead;
    }
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

cur->next是第二个

newhead = cur,
随着循环的继续,newhead不断指向后面的节点,到最后指向原来链表的第一个
迭代可以理解为就是循环,cur是循环往后遍历节点每一次循环的那个当前节点