커 리 어 컵 - 링크 2.3
5567 단어 UP
이 문제 의 관건 은 결점 을 삭제 하 는 지침 이 하나 밖 에 없다 는 것 이다. 만약 그것 을 직접 삭제 하면 이 링크 는 끊 어 질 것 이다.그러나 당신 은 이 결점 이 생기 기 전에 점 을 찍 는 지침 을 얻 을 수 없습니다. 그렇습니다. 그것 은 머리 결점 도 제공 하지 않 습 니 다.이런 상황 하에 서 너 는 다른 길 을 찾 을 수 밖 에 없다.이 문 제 를 다시 한 번 살 펴 보면 우 리 는 c 결점 에서 시작 한 후의 지침 만 얻 을 수 있 습 니 다. 만약 당신 이 c 결점 후의 어떤 결점 을 삭제 하 라 고 한다 면 틀림없이 문제 가 없 을 것 입 니 다.예 를 들 어 결점 d 를 삭제 하면 c 의 next 지침 을 e 로 가리 키 고 delete d 는 ok 입 니 다.좋 습 니 다. 만약 에 우리 가 결점 d 를 삭제 하면 우 리 는 a - > b - > c - > e 를 얻 을 수 있 습 니 다. 목표 링크 와 하나의 결점 만 차이 가 납 니 다.어 떡 하지?d 의 데 이 터 를 c!결점 구 조 는 모두 같 습 니 다. 누구나 똑 같 습 니 다. 가장 중요 한 것 은 결점 중의 데 이 터 를 삭제 하 는 것 입 니 다. 우리 가 남 긴 것 이 데이터 a - > b - > d - > e 만 있 으 면 됩 니 다.
아이디어 가 생 겼 어 요. 코드 를 직접 쓰 시 겠 어 요?등등, 코드 를 쓰기 전에 발생 할 수 있 는 여러 가지 상황 을 간단하게 분석 합 시다 (물론 경계 상황 포함).만약 c 가 링크 를 가리 키 는: 1. 머리 결점;2. 중간 결산 점.3. 끝 점.4. 비어 있다.상황 1, 2 는 정상 적 인 상황 에 속 하고 d 의 데 이 터 를 c, c 의 next 포인터 가 d 의 next 가 가리 키 는 결점 을 가리 키 며 d 를 삭제 하면 OK 입 니 다.상황 4 가 비어 있 으 면 바로 돌아 갑 니 다.상황 3 은 비교적 특수 하 다. 만약 에 c 가 꼬리 결점 을 가리 키 면 보통 c 를 직접 삭제 하면 된다 고 생각 할 것 이다. 어차피 c 뒤에 도 결점 이 없 으 니 체인 시계 가 끊 어 질 까 봐 걱정 하지 않 아 도 된다.그런데 정말 그런 가요?코드 는 c 를 직접 삭제 하고 c 를 가리 키 는 결점 (예 를 들 어 b) 의 next 지침 이 비어 있 지 않다 는 것 을 알려 줍 니 다.즉, 만약 당신 이 이 링크 를 인쇄 한다 면, 그것 은 원래 링크 의 길이 와 같은 링크 를 인쇄 할 것 입 니 다. 그리고 마지막 요 소 는 0 입 니 다!
, CTCI , 。 , , c , , 。 , 。 , 。
C + + 구현 코드:
#include<iostream>
#include<new>
using namespace std;
struct ListNode
{
int val;
ListNode *next;
ListNode(int x):val(x),next(NULL) {}
};
void createList(ListNode *&L)
{
int arr[10]= {1,2,3,2,5,6,7,3,9,1};
int i;
ListNode *p=NULL;
for(i=0; i<10; i++)
{
ListNode *tmp=new ListNode(arr[i]);
if(L==NULL)
{
L=tmp;
p=tmp;
}
else
{
p->next=tmp;
p=tmp;
}
}
}
void deleteNode(ListNode *c)
{
if(c==NULL||c->next==NULL)
return;
ListNode *d=c->next;
c->next=d->next;
c->val=d->val;
d->next=NULL;
delete(d);
}
int main()
{
ListNode *head=NULL;
createList(head);
ListNode *p=head;
while(p)
{
cout<<p->val<<" ";
p=p->next;
}
cout<<endl;
deleteNode(head->next->next->next);
p=head;
while(p)
{
cout<<p->val<<" ";
p=p->next;
}
cout<<endl;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
개인 FLEX 지식 라이브러리 작업 노트[size=large]1、 이 방법은 TileWindows 팝업 창에 있습니다. TitleWindows의 maxWidth와 maxHeight를 지정하지 않으면 최대 값이 화면 전체에 깔립니다. 페이지의minHeigh...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.