精华内容
下载资源
问答
  • 请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点。传入函数的唯一参数为 要被删除节点。 示例 1: 输入:head = [4,5,1,9], node = 5 输出:[4,1,9] 解释:给定你链表中值为5的第二个节点,那么在...
    ‘’‘
    请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点。传入函数的唯一参数为 要被删除的节点。
    
    示例 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.
    
    ’‘’
    
    class ListNode:
        def __init__(self,x):
            self.val=x
            self.next=None
    
    def deleteNode(node):
        node.val=node.next.val
        node.next=node.next.next
    
    
    head=ListNode(4)
    p1=ListNode(5)
    p2=ListNode(1)
    p3=ListNode(9)
    head.next=p1
    p1.next=p2
    p2.next=p3
    
    deleteNode(p2)
    while head:
        print(head.val)
        head=head.next
    

     

    展开全文
  • 那就是节点中前后节点信息唯一区别的地方就是该节点的data域!!!!!哈哈,找到这个关键点那么问题就解决了,在给定指针的前提下直接删除后面节点,然后将后面节点的值赋给当前位置,大功告成!注:该源码是参考...

    这个问题最初的想法就获得给点节点之前的节点的位置即可,但是这样做再仔细想想貌似意义不是很大,至少从面试的角度感觉到面试官不想从这个角度让面试者去考虑问题,所以这里又有一个投机取巧的办法。

    那就是节点中前后节点信息唯一区别的地方就是该节点的data域!!!!!

    哈哈,找到这个关键点那么问题就解决了,在给定指针的前提下直接删除后面节点,然后将后面节点的值赋给当前位置,大功告成!

    注:该源码是参考别人的

    #include <iostream>
    using namespace std;
    
    typedef struct node{
        int data;
        node *next;
    }node;
    
    node* init(int a[], int n){
        node *head, *p;
        for(int i = 0; i < n; ++i){
            node *nd = new node();
            nd->data = a[i];
            if(i==0){
                head = p = nd;
                continue;
            }
            p->next = nd;
            p = nd;
        }
        return head;
    }
    
    bool remove(node *c){
        if(c==NULL || c->next==NULL) return false;
        node *q = c->next;
        c->data = q->data;
        c->next = q->next;
        delete q;
        return true;
    }
    void print(node *head){
        while(head){
            cout << head->data << " ";
            head = head->next;
        }
        cout << endl;
    }
    
    int main(){
        int n = 10;
        int a[] = {
            9, 2, 1, 3, 5, 6, 2, 6, 3, 1
        };
        node *head = init(a, n);
        int cc = 3;
        node *c = head;
        for(int i=1; i<cc; ++i) c = c->next;
        print(head);
        if(remove(c))
            print(head);
        else
            cout<<"failure"<<endl;
        return 0;
    }
    
    展开全文
  • 关于这个问题,基本思路是先将要被删除节点的上一个节点和下一个节点连接起来,然后再把要删除节点释放掉就行了。 首先先定义一个链表: struct STU { int a; int b; int c; struct STU *next; } struct STU ...

    关于这个问题,其基本思路是先将被删除节点的上一个节点和下一个节点连接起来,然后再把要删除的节点释放掉就行了。
    首先先定义一个链表:

    struct STU 
    {
    	int a;
    	int b;
    	int c;
    	struct STU *next;
    }
    struct STU *temp()
    {
    	struct STU *head;
    	struct STU *p;
    	struct STU *q;
    	head=(struct STU *)malloc(sizeof(struct STU));
    	p=head;
    	for(int i=0;i<3;i++)
    	{
    		q=(struct STU *)malloc(sizeof(struct STU));
    		scanf("%d",&q->a);
    		scanf("%d",&q->b);
    		scanf("%d",&q->c);
    		p->next=q;
    		p=q;
    	}
    	p->next=NULL;
    }
    

    下面就按照上面的思路来删除节点

    struct STU *d;
    struct STU *q;
    q=head;
    d=head->next;
    int e;
    scanf("%d",&e);
    while(d!=NULL)
    {
    	if(d->a==e)//查找要删除的节点
    	{
    		q->next=d->next;//将d的下一个节点和上一个节点连接起来
    		free(d);//释放d
    		break;
    	}
    	else
    	{
    		q=d;
    		d=d->next;
    	}
    }
    
    

    下面上机实践一下
    在这里插入图片描述
    其中最关键的两行代码就是这两行:

    	q->next=d->next;//将d的下一个节点和上一个节点连接起来
    	free(d);//释放d
    

    这是删除节点的关键。

    还需要注意的是,以不同的方式定义链表,其删除节点的方式可能也不太相同,比如,要是把上述头节点(即head)的a,b,c也赋上值,那么用上述删除节点的方式可能就会出现问题,而出现问题的地方很有可能就在head上,这时就需要考虑头节点的问题了,要把头节点拉出来单独处理。比如:

    struct STU *q;
    struct STU *p;
    q=head;
    p=head->next;
    *head=*p;
    free(p);
    

    这里只是单单提供了此情况下如何删除头节点的思路,具体问题还要等到具体情况下进行分析。

    如有什么不足或错误的地方,敬请谅解,希望能够指出,不胜感激。

    展开全文
  • 删除链表中节点 题目: 删除链表中节点 请编写一个函数,使其可以删除某个链表给定的(非末尾)节点,你将只被给定要求被删除的节点。 现有一个链表 – head = [4,5,1,9],它可以表示为: 示例 1: > 输入: ...

    删除链表中的节点


    1- 题目:

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

    现有一个链表 – 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.
    

    说明:

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

    2- 算法思路:

    c语言代码:

    class Solution {
    public:
        void deleteNode(ListNode* node) {
            *node = *(node->next);
        }
    };
    
    

    参考链接:https://leetcode-cn.com/problems/delete-node-in-a-linked-list/solution/chuan-tong-cyu-yan-lian-biao-yu-mian-xiang-dui-xia/

    注意: 这个题目意思是我们只知道要删除的节点node,其他信息都不知道,也就是不知道node节点的上一个节点————从链表中删除一个节点node 的最常见法 是 修改 前一个节点的 next 指针,使其指向之后的节点(如下图),所以我们不能用这个方法!!
    在这里插入图片描述

    思路:

    C语言中,用指针和结构体来表示链表——这意味着 node 和 它前一个节点的next 指向了内存中的 同一地址——把node的地址作修改,前一个节点的 next也同时被修改了————也就是 直接把node后一个节点赋值给node就行了:*node = *(node->next);

    展开全文
  • 删除链表中节点1.要求2.思路及代码片**这个题很有意思,它直接给了你要删除的节点了。就是node,给我们的这个node就是链表的一部分,直接在上面操作就可以了。如果是末尾节点,则不能使用该题解了,需要从头遍历到...
  • Java实现 LeetCode 237 删除链表中节点

    万次阅读 多人点赞 2020-03-03 16:17:26
    237. 删除链表中节点 请编写一个函数,使其可以删除某个链表给定的(非末尾)节点,你将只被给定要求被删除的节点。 现有一个链表 – head = [4,5,1,9],它可以表示为: 示例 1: 输入: head = [4,5,1,9], node =...
  • 删除链表中节点详解(java)
  • 题目       代码部分(0ms 100%) class Solution { public void deleteNode(ListNode node) { node.val = node.next.val; node.next = node.next.next; } }  
  • 删除链表中节点

    2021-02-17 16:26:52
    请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点。传入函数的唯一参数为要被删除节点。 示例 1: 输入:head = [4,5,1,9], node = 5 输出:[4,1,9] 解释:给定你链表中值为5的第二个节点,那么...
  • LeetCode 237. 删除链表中节点

    千次阅读 多人点赞 2020-08-13 19:39:47
    LeetCode 237. 删除链表中节点
  • 删除链表中节点 题目描述 请编写一个函数,使其可以删除某个链表给定的(非末尾)节点,你将只被给定要求被删除的节点。 现有一个链表 – head = [4,5,1,9],它可以表示为: 示例 1: 输入: head = [4,5,1,9], ...
  • 请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除节点。 说明:1)链表至少包含两个节点 2)链表中所有节点的值都是唯一的 3)给定的节点为非末尾节点并且一定是链表中...
  • 237. 删除链表中节点 请编写一个函数,使其可以删除某个链表给定的(非末尾)节点,你将只被给定要求被删除的节点。 现有一个链表 – head = [4,5,1,9],它可以表示为: 说明: 链表至少包含两个节点。 链表...
  • 解题:该题是删除链表中节点,一般删除节点需要将头节点用一个东西标记,返回能直接返回,也就是需要一个哑元节点。 假设链表只有一个节点或者删除的节点是头节点,都需要设置一个哑元节点。 # Definition
  • 237删除链表中节点

    2018-09-29 09:48:54
    237删除链表中节点 题目 请编写一个函数,使其可以删除某个链表给定的(非末尾)节点,你将只被给定要求被删除的节点。 现有一个链表 – head = [4,5,1,9],它可以表示为: 4 -&gt; 5 -&gt; 1 -&gt; ...
  • 删除链表中节点 1、请编写一个函数,使其可以删除某个链表给定的(非末尾)节点,你将只被给定要求被删除的节点。 2、说明: *链表至少包含两个节点。 *链表所有节点的值都是唯一的。 *给定的节点为非末尾节点...
  • 删除链表中节点 1、题目: 请编写一个函数,使其可以删除某个链表给定的(非末尾)节点,你将只被给定要求被删除的节点。 现有一个链表 --head =[4,5,1,9],它可以表示为: 示例 1: 输入: head = ...
  • 删除链表中节点 请编写一个函数,使其可以删除某个链表给定的(非末尾)节点,你将只被给定要求被删除的节点。 示例 1: 输入: head = [4,5,1,9], node = 5 输出: [4,1,9] 解释: 给定你链表中值为 5 的第二个节点...
  • 删除链表中节点(简单) 请编写一个函数,使其可以删除某个链表给定的(非末尾)节点。传入函数的唯一参数为 要被删除的节点 。 提示: 链表至少包含两个节点。 链表所有节点的值都是唯一的。 给定的节点...
  • 删除链表中节点 java 请编写一个函数,使其可以删除某个链表给定的(非末尾)节点,你将只被给定要求被删除的节点。 现有一个链表 – head = [4,5,1,9],它可以表示为: 4 -&gt; 5 -&gt; 1 -&gt; 9 ...
  • 21、删除链表中节点 请编写一个函数,使其可以删除某个链表给定的(非末尾)节点,你将只被给定要求被删除的节点。 现有一个链表 – head = [4,5,1,9],它可以表示为: 示例 1: 输入: head = [4,5,1,9], node = ...
  • LeetCode刷题日记删除链表中节点Python代码 删除链表中节点 请编写一个函数,使其可以删除某个链表给定的(非末尾)节点,你将只被给定要求被删除的节点。 现有一个链表 – head = [4,5,1,9],它可以表示为: ...
  • 请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除节点。 现有一个链表 – head = [4,5,1,9],它可以表示为: 4 -&gt; 5 -&gt; 1 -&gt; 9 示例 1: 输入: head = ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 66,948
精华内容 26,779
关键字:

删除链表中某个节点