精华内容
下载资源
问答
  • 请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除节点。 现有一个链表 --head =[4,5,1,9],它可以表示为: 示例 1: 输入: head = [4,5,1,9], node = 5 输出: [4,1,9] ...

    请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。

    现有一个链表 -- head = [4,5,1,9],它可以表示为:

    示例 1:

    输入: head = [4,5,1,9], node = 5
    输出: [4,1,9]
    解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.
    示例 2:

    输入: head = [4,5,1,9], node = 1
    输出: [4,5,9]
    解释: 给定你链表中值为 1 的第三个节点,那么在调用了你的函数之后,该链表应变为 4 -> 5 -> 9.
     

    说明:

    链表至少包含两个节点。
    链表中所有节点的值都是唯一的。
    给定的节点为非末尾节点并且一定是链表中的一个有效节点。
    不要从你的函数中返回任何结果。

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     struct ListNode *next;
     * };
     */
    void deleteNode(struct ListNode* node) {
        node->val = (node->next)->val;
        node->next = (node->next)->next;
    }

     

    展开全文
  • 24.两两交换链表中节点 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 示例: 给定 1->2->3->4, 你应该返回 2->1-&...

    题目

    24.两两交换链表中的节点

    给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。

    你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

    示例:

    给定 1->2->3->4, 你应该返回 2->1->4->3.

    思路

    此处以四个节点为例

    • 首先更换前两个节点,将第一个节点指向第三个节点,第二个节点指向第一个节点,如图在这里插入图片描述
    • 但是到第二个两两交换就会产生问题,由于只有四个节点,第三个节点指向NULL,第四个节点指向第三个节点,但是前一个节点也指向第三个节点,没有节点指向第四个节点,如图在这里插入图片描述
    • 这时我们只需将第二个节点指向第四个节点即可
      在这里插入图片描述
    • 特殊情况:因为我们的思路是建立在第一个节点和第二个节点存在的情况下,如果不符合条件则另返回

    代码实现

    综上分析,我们需要三个节点来记录前一个节点r1,当前交换的第一个节点p和当前交换的第二个节点r;又因为最后需要返回头结点,我们再申请一个节点去记录头结点(也就是原始链表的第二个节点)

    struct ListNode* swapPairs(struct ListNode* head){
       	if (!head || !head -> next) {
    		return head;
    	}
    	struct ListNode *p = head;
    	struct ListNode *p1 = head->next;
     	struct ListNode *r ,*r1;
     		r1 = head;
     		r = p -> next;
            p -> next = p -> next -> next;
            r -> next = p;
            p = p -> next ;
            
        while(p && p -> next) {
    		r1 = r -> next;
        	r = p -> next;
        	p -> next = p -> next -> next;
        	r -> next = p;
        	r1 -> next = r;
        	p = p -> next;
        }
      
        return p1;
    }
    
    展开全文
  • 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 示例: 给定 1->2->3->4, 你应该返回 2->1->4->3. /** * ...

    给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。

    你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

     

    示例:

    给定 1->2->3->4, 你应该返回 2->1->4->3.

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     struct ListNode *next;
     * };
     */
    
    
    struct ListNode* swapPairs(struct ListNode* head){
        struct ListNode* dummy = NULL;
        struct ListNode* dummy_temp = NULL;
        struct ListNode* p1 = NULL;
        struct ListNode* p2 = NULL;
        if ((head == NULL) || (head->next == NULL)) {
            return head;
        }
        dummy = (struct ListNode*)malloc(sizeof(struct ListNode));
        dummy->next = head;
        dummy_temp = dummy;
        while ((dummy_temp->next != NULL) && ((dummy_temp->next)->next != NULL)) {
            p1 = dummy_temp->next;
            p2 = (dummy_temp->next)->next;
            p1->next = p2->next;
            dummy_temp->next = p2;
            p2->next = p1;
            dummy_temp = (dummy_temp->next)->next;
        }
        return dummy->next;
    }

     

    展开全文
  • 题目 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。...链表中节点的数目在范围 [0, 100] 内 0 <= Node.val <= 100 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/pr

    题目

    给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
    你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

    示例 1:
    示例1图片
    输入:head = [1,2,3,4]
    输出:[2,1,4,3]
    示例 2:

    输入:head = []
    输出:[]
    示例 3:

    输入:head = [1]
    输出:[1]

    提示:
    链表中节点的数目在范围 [0, 100] 内
    0 <= Node.val <= 100

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/swap-nodes-in-pairs

    思路

    题目简单,思路也比较简单:
    1、首先明确一个循环中需要四个变量: 交换的两个节点+交换后的小链表赋值给前面的链表节点+后面的链表节点赋值给当前交换后的链表节点;
    明确四个节点变量的作用,进行交换赋值即可;
    2、直到节点为空跳出循环;

    程序

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     struct ListNode *next;
     * };
     */
    struct ListNode* swapPairs(struct ListNode* head){
        struct ListNode* last = NULL;
        struct ListNode* pre = head;
        struct ListNode* mid = NULL;
        struct ListNode* next = NULL;
        /*获取链表头*/
        if(pre != NULL && pre->next != NULL){
            head = head->next;
        }
        /*直到没有节点或者剩余一个节点时,跳出循环*/
        while(pre != NULL && pre->next != NULL){
            mid = pre->next;
            next = mid->next;
            /*重新连接链表*/
            pre->next = next;
            mid->next = pre;
            if(last != NULL){
                last->next = mid;
            }
            last = pre;
            pre = next;
        }
        return head;
    }
    
    展开全文
  • 请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点。传入函数的唯一参数为 要被删除节点 。 示例 1: 输入:head = [4,5,1,9], node = 5 输出:[4,1,9] 解释:给定你链表中值为 5 的第二个节点,那么...
  • 向单向链表中删除指定节点 前言:从链表中删除一个节点与插入一个节点类似,关键在于查找,但需要注意的是,删除一个节点 并不是真的删除了,而是将需要删除节点链表中分离出来,最后将这个结点用free函数释放...
  • 删除链表中节点(C语言)(C语言) 题目: 请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除节点。 现有一个链表 – head = [4,5,1,9],它可以表示为: 示例1: 输入: ...
  • ⭐️前面的话⭐️ 大家好!博主开辟了一个新的专栏——剑指offer,我要开始刷题了!这个专栏会介绍《剑指offer》书上所有的面试编程题。并且会分享一些我的刷题心得。由于博主水平有限,如... 删除链表节点C语言
  • 请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点。传入函数的唯一参数为 要被删除节点 。 现有一个链表 – head = [4,5,1,9],它可以表示为: 示例 1: 输入:head = [4,5,1,9], node = 5 输出:[4,1...
  • C语言静态链表指定节点的前后插入新节点删除
  • 两两交换链表中节点给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例:给定 1->2->3->4, 你应该返回 2->1->4->...
  • 请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除节点。 现有一个链表 – head = [4,5,1,9],它可以表示为: 4 -&gt; 5 -&gt; 1 -&gt; 9 示例 1: 输入: head = [4...
  • 思路:这个题刚刚看以为就是普通链表删除,但是发现题目没有给头节点,看了其他的解答发现思路大致是将node的后一个节点赋值给node,跳过node的一下个节点,因为要删除节点已经给出,所以不需要手动删除。...
  • 删除指定节点之后存在的节点,需要跳过所需数量的节点以到达节点,之后的节点将被删除。 需要跟踪这两个节点。如果在该节点之前存在的节点,则将删除节点。 为此,使用了两个指针:ptr和ptr1。使用以下语句来...
  • 链表中节点进行顺序访问 前言:对链表的访问具体包括修改、运算和输出,作为C语言基础,这里只对输出进行阐释 一、算法描述 用一个工作指针p遍历整个链表,直到链表的结束标志为止,如果链表为空,输出提示信息...
  • 给定单向链表的头指针和一个要删除节点的值,定义一个函数删除节点。 返回删除后的链表的头节点。 示例 1: 输入: head = [4,5,1,9], val = 5 输出: [4,1,9] 解释: 给定你链表中值为 5 的第二个节点,那么在...
  • 前言:链表的插入过程就是把新建的节点插入到已有的链表中,鉴于此种理解,也可以把链表的创建看做是一种特殊的插入节点过程,但是具体来说,链表的插入较于链表的创建来说稍复杂一些。 一、问题描述   &...
  • 题解: /**  * Definition for singly-linked list.  * struct ListNode {  * int val;  * struct ListNode *...此题方法巧妙,由于不知道头结点(node是要删去的),所以只能够将后一个节点覆盖前一个,再将后一个删除
  • 请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点。传入函数的唯一参数为 要被删除节点 。 注意: 在只给出待删除节点的情况下删除该结点。 void deleteNode(struct ListNode* node) { node->val ...
  • /** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ typedef struct ListNode ... /* 删除最后一个节点 */ free(node); last->next = NULL; }
  • 两两交换链表中节点C语言) 数据结构-链表:算法与数据结构参考 题目: 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。例: 输入:1->2->3->4 输出:2->1->4->3. 思路: 递归 ...
  • 给定单向链表的头指针和一个要删除节点的值,定义一个函数删除节点。 返回删除后的链表的头节点。 注意:此题对比原题有改动 示例 1: 输入: head = [4,5,1,9], val = 5 输出: [4,1,9] 解释: 给定你链表中值为 5 ...
  • 请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除节点。 /** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; ...
  • #include#includetypedef struct DoubleLinkedList{int data;struct DoubleLinkedList *pre;struct DoubleLinkedList *next;...//建立链表DlinkedList_Node* createDLink(){DlinkedList_Node *head,*p,*s...
  • 链表中插入节点C语言实现)

    千次阅读 2020-07-15 17:45:09
    相关背景介绍1.1 双链表概念1.2 双链表的优势与劣势1.3 双链表插入节点的位置2. 不同位置插入数据2.1 在DLL的前端添加节点2.2 在给定节点之前添加节点2.3 在DLL的末尾添加节点2.4 在给定节点之后添加节点3. 综合...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 40,369
精华内容 16,147
关键字:

删除链表中的指定节点c语言

c语言 订阅