题目地址:
今天刷删除链表的倒数第N个节点,大家有兴趣可以点上看看题目要求,试着做一下。
相似类型题:
强烈建议先做做这两道题目,做完这两道题,对下面题目的双指针解法会有更好的理解
本题题目:
我们直接看本题题解吧:
解题方法:
难度分析:
解题分析:
解题思路(双指针):
2、创建双指针,fast,slow,这里指针fast直接指向head,而指针slow需要指向被删除节点的上一个节点(不然被删节点后面节点也跟着被删了),因此需要初始化指向dummy节点
3、循环遍历,fast指针先走n步,然后fast与slow同步移动(此时二者相差n-1个节点),最后直到fast指向null,那么此时slow指向的是被删节点的前驱节点
代码实现:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
//这里first即fast,second即slow
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode dummy = new ListNode(0, head); //创建亚节点
ListNode first = head;
ListNode second = dummy;
for (int i = 0; i < n; ++i) {
first = first.next; //指针fast 先走n步
}
while (first != null) {
first = first.next;
second = second.next; //fast 与slow同步移动,直至 fast指向null
}
//被删节点的上一节点的next指向被删节点的下一节点,即删除节点操作
second.next = second.next.next;
ListNode ans = dummy.next;
return ans;//这里如果返回head的话,那么当链表只有一个元素并且删除一个元素的时候返回的不是空
}
}
代码说明:
解题思路里讲的特殊情况,即链表只有一个元素时要删除这个元素,则会报错,所以保险起见,还是用设置头指针指向链表第一个结点的方式比较稳妥。
代码实现(计算链表长度):
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode dummy = new ListNode(0, head);
int length = getLength(head);
ListNode cur = dummy;
for (int i = 1; i < length - n + 1; ++i) {
cur = cur.next;
}
cur.next = cur.next.next;
ListNode ans = dummy.next;
return ans;
}
public int getLength(ListNode head) {
int length = 0;
while (head != null) {
++length;
head = head.next;
}
return length;
}
}
代码实现(栈):
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode dummy = new ListNode(0, head);
Deque<ListNode> stack = new LinkedList<ListNode>();
ListNode cur = dummy;
while (cur != null) {
stack.push(cur);
cur = cur.next;
}
for (int i = 0; i < n; ++i) {
stack.pop();
}
ListNode prev = stack.peek();
prev.next = prev.next.next;
ListNode ans = dummy.next;
return ans;
}
}
原文地址:https://blog.csdn.net/m0_70437378/article/details/134674482
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_38962.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。