链表 --- leedcode19 删除链表的第n个节点 (Medium)

题目

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

示例:

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

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

给定的 n 保证是有效的。

解析

java代码:

class Solution {
     
    public ListNode removeNthFromEnd(ListNode head, int n) {
     
        ListNode dummyP = new ListNode(0);
		 ListNode dummyQ = new ListNode(0);
		 ListNode tempNode =  dummyP;
		 dummyP.next = head;
		 dummyQ.next = head;
		 // 先让dummyP,dummyQ保持两节点之间的节点个数为n(即先让q前移n+1次)
		 for(int i = 0;i< n+1;i++) {
     
			 dummyQ = dummyQ.next;
		 }
		 // 当dummyQ不为null时,dummyP、dummyQ两节点同时向后移
		 while(dummyQ != null) {
     
			 dummyP = dummyP.next;
			 dummyQ = dummyQ.next;
		 }
		 // 此时dummyP的下一个结点为所要删除的节点
		 dummyP.next = dummyP.next.next;
		 	 
		return tempNode.next;	        
	    }  
}

js代码:

var removeNthFromEnd = function(head, n) {
     
    var q = new ListNode();
    var p = new ListNode();
    var temp = p;   // 哑结点
    p.next = head;
    q.next = head;
    // 先保持 p、q之间的结点数为n
    for(var i = 0; i < n+1; i++){
     
        q = q.next;
    }
    // 再同时移动p、q,直到q指向空
    while(q != null) {
     
        p = p.next;
        q = q.next;
    }
    // 此时p结点的下一个结点就是要删除的结点
    p.next = p.next.next;
    return temp.next;
};

你可能感兴趣的:(#,链表,链表)