Algorithm LeetCode 237 + LeetCode 206

53 篇文章 14 订阅
45 篇文章 1 订阅

Algorithm 第五周

LeetCode 237. 删除链表中的节点

题目链接 解题语言 : C

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

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.

解题思路 : 其实就是该结点中的值等于下一结点中的值,重要的是结点中指针指向从下一结点变成了下下个结点
而社区中的答案 ( 注释部分 ) 其实是对指针的理解 , 结点也是指针 , 直接 * ( p )=*(p->next) 其实就是将下一结点中的 数据复制给 p 覆盖 p 结点中原有的数据 , 从而达到删除结点的效果 。
结果虽然一致 , 但是代表的是对指针这一块知识的不同程度理解 , 有待加强 。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
void deleteNode(struct ListNode* node) {
    //*node = *(node->next); 官方社区里别人写的答案,让我有了新的认识
    node->val=(node->next)->val;
    node->next=(node->next)->next;
}

LeetCode 206. 反转链表

题目链接 解题语言 : C

反转一个单链表。

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

解题思路 : 这道题的核心是三个结点的设立,一个为中间结点 (代码中的 new_head),一个是上一结点 (代码中的 node) , 以及下一结点 ( head ),将原链表的中间结点指向上一结点即完成链表的反转

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* reverseList(struct ListNode* head) {
	struct ListNode* new_head=NULL,*node=NULL;
	while (head!=NULL)
	{
		new_head = head;//新的头结点等于当前结点
		head = head->next;//当前结点变成下一结点
		new_head->next = node;//当前结点的下一结点为上一结点,从空指针开始
		node = new_head;//上一节点变成当前结点,以此循环,达到链表反转的效果
	}
	return new_head;
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值