LeetCode0019删除链表的倒数第N个节点

21 阅读1分钟

题目:

给你一个链表,删除链表的倒数第 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)
}

怎奈我独自咀嚼风景.





***如果大家喜欢我的分享的话.可以关注我的微信公众号


念何架构之路