题目:
给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。
输入:head = [1,2,3,4,5], n = 2
输出:[1,2,3,5]
示例 2:
输入:head = [1], n = 1
输出:[]
示例 3:
输入:head = [1,2], n = 1
输出:[1]
java:
public static ListNode removeNthFromEnd(ListNode head, int n) {
ListNode node = new ListNode(0);
node.next = head;
ListNode fast = head;
ListNode slow = head;
for (int i = 0; i < n; i++) {
fast = fast.next;
}
while (fast.next != null){
fast = fast.next;
slow = slow.next;
}
slow.next = slow.next.next;
return node.next;
}
public static void main(String[] args) {
ListNode node = new ListNode(1);
ListNode node2 = new ListNode(2);
ListNode node3 = new ListNode(3);
ListNode node4 = new ListNode(4);
ListNode node5 = new ListNode(5);
node.next = node2;
node2.next = node3;
node3.next= node4;
node4.next = node5;
ListNode listNode = removeNthFromEnd(node, 2);
System.out.println(listNode);
}
}
@Data
class ListNode {
int val;
ListNode next;
ListNode() {
}
ListNode(int val) {
this.val = val;
}
ListNode(int val, ListNode next) {
this.val = val;
this.next = next;
}
}
Go:
type ListNode struct {
Val int
Next *ListNode
}
func RemoveNthFromEnd(head *ListNode, n int) *ListNode {
node := &ListNode{}
node.Next = head
cur := head
pre := node
i := 1
for cur != nil {
cur = cur.Next
if i > n {
pre = pre.Next
}
i++
}
pre.Next = pre.Next.Next
return node.Next
}
func main() {
node := &LeetCode.ListNode{1, &LeetCode.ListNode{2, &LeetCode.ListNode{3, &LeetCode.ListNode{4, &LeetCode.ListNode{5, nil}}}}}
end := LeetCode.RemoveNthFromEnd(node, 2)
for end.Next != nil {
fmt.Println(end.Val)
end = end.Next
}
fmt.Println(end.Val)
}
怎奈我独自咀嚼风景.
***如果大家喜欢我的分享的话.可以关注我的微信公众号
念何架构之路