删除链表的倒数第N个节点
发布日期:2021-05-15 09:23:33 浏览次数:21 分类:原创文章

本文共 986 字,大约阅读时间需要 3 分钟。

给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。

示例:

给定一个链表: 1->2->3->4->5, 和 n = 2.

当删除了倒数第二个节点后,链表变为 1->2->3->5.
说明:

给定的 n 保证是有效的。

进阶:

你能尝试使用一趟扫描实现吗?

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路:定义两个指针,一个指针先走,再两个一起走,直到之前的那个指针为空,后继指针为要删除的结点的前一个指针

/** * Definition for singly-linked list. * struct ListNode { *     int val; *     ListNode *next; *     ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {   public:    ListNode* removeNthFromEnd(ListNode* head, int n) {           ListNode*p1,*p2;		p1=p2=head;		int i;		i=0;		if (n<=0)		{   			return head;		}		while (i < n && p2)		{   			p2=p2->next;			i++;		}		if (!p2)		{   			//cout<<"one\n";			head=head->next;			//cout<<head->val<<endl;			return head;		}		//cout<<p2->val<<endl;		i=0;		while (p2)		{   			if (i!=0)			{   				p1=p1->next;			}			i++;			p2=p2->next;		}		//cout<<p1->val<<endl;		p2=p1->next;		p1->next=p2->next;		delete p2;		return head;    }};
上一篇:友元函数,友元类
下一篇:5.线程与并发同步-哲学家用餐模型分析

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2025年04月25日 21时19分26秒