码迷,mamicode.com
首页 > 其他好文 > 详细

leetcode_19_Remove Nth Node From End of List

时间:2015-02-13 11:43:14      阅读:113      评论:0      收藏:0      [点我收藏+]

标签:c++   leetcode   linked_list   

欢迎大家阅读参考,如有错误或疑问请留言纠正,谢谢技术分享


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.


//方法:测试Accepted
//算法:
//1 准备两个指针first, second
//2 先让fisrt走n步
//3 让fisrt和second同时走直到first遇到结尾
//4 要用一个temp指针来记录second前一个node,用来删除second用。
class Solution {
public:
    ListNode *removeNthFromEnd(ListNode *head, int n) {
		ListNode *first=head , *second=head;
		ListNode *temp=second;
		for(int i=0; i<n; i++)
			first = first->next;
		while(first)
		{
			first=first->next;
			temp = second;
			second=second->next;
		}
		if(second == head)
			head = head->next;
		else
			temp->next = second->next;

		return head;
    }
};



//算法:
//1 准备两个指针first, second
//2 先让fisrt走n步
//3 让fisrt和second同时走直到first遇到结尾
//4 要用一个temp指针来记录second前一个node,用来删除second用。
#include<iostream>

using namespace std;

#define N 5

struct ListNode {
	int val;
	ListNode *next;
	ListNode(int x) : val(x), next(NULL) {}
};

class Solution {
public:
    ListNode *removeNthFromEnd(ListNode *head, int n) {
		ListNode *first=head , *second=head;
		ListNode *temp=second;
		for(int i=0; i<n; i++)
			first = first->next;
		while(first)
		{
			first=first->next;
			temp = second;
			second=second->next;
		}
		if(second == head)
			head = head->next;
		else
			temp->next = second->next;

		return head;
    }
};

ListNode *creatlist()
{
	ListNode *head;
	head=NULL;

	for(int i=0; i<N; i++)
	{
		int a;
		ListNode *p;
		cin>>a;
		p = (ListNode*)malloc(sizeof(ListNode));
		p->val=a;
		p->next=head;
		head = p;
	}
	return head;
}

int main()
{
	ListNode *list=creatlist();
	ListNode *outlist;
	Solution lin;
	outlist=lin.removeNthFromEnd( list,2 );

	for(int i=0; i<N; i++)
	{
		cout<<outlist->val;
		outlist = outlist->next;
	}
}


leetcode_19_Remove Nth Node From End of List

标签:c++   leetcode   linked_list   

原文地址:http://blog.csdn.net/keyyuanxin/article/details/43791951

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!