剑指 Offer II 021. 删除链表的倒数第 n 个结点
第一个思路就是纯粹读题按照题目链表的输出,其中需要注意第一个节点和最后一个节点。
Go版本:
import "fmt"
func removeNthFromEnd(head *ListNode, n int) *ListNode {
len:=0
node1:=head;
if head.Next==nil {
return nil;
}
for{
len++;
if node1.Next==nil{
break;
}
node1=node1.Next
}
fmt.Println(len)
node:=head;
tmp:=node;
count:=0;
for{
count++;
if len-n==count{
next:=node.Next
node.Next=next.Next;
break;
}
if node.Next==nil{
tmp=tmp.Next
break;
}
node=node.Next;
}
return tmp
}
第二个思路快慢指针
快指针先到n处,然后慢指针和快指针继续向下走,直到快指针是空,
java版本:
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode fast=head;
while(n>0 && fast!=null){
n--;
fast=fast.next;
}
ListNode dummy=head;
ListNode slow=dummy;
if(fast==null){
dummy=dummy.next;
return dummy;
}
fast=fast.next;
while(fast!=null){
fast=fast.next;
slow=slow.next;
}
slow.next=slow.next.next;
return dummy;
}
}
网友评论