Remove Nth Node From End of List 链表删除倒数第N个元素@LeetCode
2013-10-25 02:35
591 查看
题目:
链表删除倒数第N个元素
思路:
先找到倒数第k个元素,再删除之
Again:
链表题必用dummyHead!
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode dm = new ListNode(0);
dm.next = head;
ListNode pro = dm, cur = dm;
int i;
for(i=0; i<n; i++){
if(pro.next!=null){
pro = pro.next;
}else{
break;
}
}
if(i == n){
while(pro.next != null){
pro = pro.next;
cur = cur.next;
}
if(cur.next != null){
cur.next = cur.next.next;
}
return dm.next;
}else{ // n too big to get
return dm.next;
}
}
}
链表删除倒数第N个元素
思路:
先找到倒数第k个元素,再删除之
package Level2; import Utility.ListNode; /** * * Remove Nth Node From End of List * * Given a linked list, remove the nth node from the end of list and return its head. For example, Given linked list: 1->2->3->4->5, and n = 2. After removing the second node from the end, the linked list becomes 1->2->3->5. Note: Given n will always be valid. Try to do this in one pass. */ public class S19 { public static void main(String[] args) { ListNode head = new ListNode(1); ListNode l2 = new ListNode(2); ListNode l3 = new ListNode(3); ListNode l4 = new ListNode(4); ListNode l5 = new ListNode(5); head.next = l2; l2.next = l3; l3.next = l4; l4.next = l5; ListNode h = removeNthFromEnd(head, 5); h.print(); } public static ListNode removeNthFromEnd(ListNode head, int n) { if(n == 0 || head == null){ return head; } if(n == 1 && head.next==null){ return null; } ListNode p = head, q = head; // 让p先行q n个位置 for(int i=0; i<n; i++){ if(p != null){ p = p.next; }else{ return head; } } // 如果这个时候p已经是null,则说明删除的必定为head if(p == null){ head = head.next; return head; } // p和q一起前进 while(p.next != null){ q = q.next; p = p.next; } // 删除元素 q.next = q.next.next; return head; } }
Again:
链表题必用dummyHead!
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode dm = new ListNode(0);
dm.next = head;
ListNode pro = dm, cur = dm;
int i;
for(i=0; i<n; i++){
if(pro.next!=null){
pro = pro.next;
}else{
break;
}
}
if(i == n){
while(pro.next != null){
pro = pro.next;
cur = cur.next;
}
if(cur.next != null){
cur.next = cur.next.next;
}
return dm.next;
}else{ // n too big to get
return dm.next;
}
}
}
相关文章推荐
- Leetcode Remove Nth Node From End of List 删除链表倒数第n个元素
- LeetCodet题解--19. Remove Nth Node From End of List(删除链表的倒数第n个元素)
- 【LeetCode】Remove Nth Node From End of List 删除链表中倒数第n个节点- Easy +
- [LeetCode]—Remove Nth Node From End of List 删除链表的倒数第n个节点
- LeetCode(Remove Nth Node From End of List)删除链表倒数第n个节点
- leetcode:Remove Nth Node From End of List(删除链表倒数第n个节点)【面试算法题】
- LeetCode 19. Remove Nth Node From End of List--删除链表的倒数第n个结点
- [leetcode] Remove Nth Node From End of List 删除链表开始的第n个元素
- leetcode-19. Remove Nth Node From End of List(删除链表倒数第N个节点)
- [C++]LeetCode 19: Remove Nth Node From End of List(删除链表中倒数第n个节点)
- LeetCode Remove Nth Node From End of List 删除倒数第n个元素
- [LeetCode] 19. Remove Nth Node From End of List 删除链表的倒数第N个节点 @python
- 【LeetCode题解】19_删除链表的倒数第N个节点(Remove-Nth-Node-From-End-of-List)
- [LeetCode-19] Remove Nth Node From End of List(删除链表中倒数第N个节点)
- leetcode_[python/C++]_19. Remove Nth Node From End of List(删除链表末第n个节点)
- #19 Remove Nth Node From End of List(删除链表倒数第N个节点)
- leetCode 19.Remove Nth Node From End of List(删除倒数第n个节点) 解题思路和方法
- Leetcode:19 Remove Nth Node From End of List(在链表中删除倒数第n个数)
- LeetCode | Remove Nth Node From End of List(移除链表中倒数第n个结点)
- 174. 删除链表中倒数第n个节点 (remove-nth-node-from-end-of-list)(c++)----lintcode面试题之链表