鏈表高效刪除

題目描述

實現一個算法,刪除單向鏈表中間的某個結點,假定你只能訪問該結點。

給定帶刪除的節點,請執行刪除操作,若該節點爲尾節點,返回false,否則返回true

#include "stdafx.h"
#include <iostream> 
#include "string.h"
#include <vector>
using namespace std;

struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
};
//ListNode *create(int value)
//{
//	ListNode *p=new ListNode(2);
//	p->val=value;
//	p->next=NULL;
//	return p;
//}
ListNode* connection(ListNode *pNode1,ListNode *pNode2)
{
	while(pNode1->next!=NULL)
	{
		pNode1=pNode1->next;
	}
	pNode1->next=pNode2;
	pNode2->next=NULL;
	return pNode1;
}
void print(ListNode* phead)
{
	while(phead)
	{
		cout<<phead->val<<" ";
		phead=phead->next;
	}
	cout<<endl;
}
class Remove {
public:
    bool removeNode(ListNode* pNode)
	{
        // write code here
        if (pNode->next==NULL)
        {
			return false;
        }
		else 
		{
			//ListNode *qNode=pNode->next;
			pNode->val=pNode->next->val;
			pNode->next=pNode->next->next;
		//	delete pNode->next;
			return true;
		}
		
    }

};
int main()
{
	//ListNode* pNode1=ListNode(1);
	//ListNode* pNode2=ListNode(2);
	ListNode pNode1(1);
	ListNode pNode2(2);
	ListNode pNode3(3);ListNode pNode4(4);
	connection(&pNode1,&pNode2);
	connection(&pNode1,&pNode3);connection(&pNode1,&pNode4);
	print(&pNode1);
	Remove pNode;int k;
	k=pNode.removeNode(&pNode2);
	print(&pNode1);
	
}


發佈了41 篇原創文章 · 獲贊 2 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章