네는 여기에 오 배선이있다. 사진을 그려 봅시다!
상상 일이 처음과 같이 우리가 더 이상 원래 있던 요소에 대한 포인터가없는
curr
|
v
+----------+ +----------+
| next | -----------+ | next | --> ...
+----------+ | +----------+
... <-- | prev | <----------+----------- | prev | <-- ...
+----------+ v +----------+
+----------+
| next |
+----------+
| prev |
+----------+
^
|
ins
주의 사항 :
curr
|
v
+----------+ +----------+
| next | ----------------------> | next | --> ...
+----------+ +----------+
... <-- | prev | <---------------------- | prev | <-- ...
+----------+ +----------+
+----------+
| next |
+----------+
| prev |
+----------+
^
|
ins
먼저, 당신은이 작업을 수행 cur->next = ins;
을 실행 curr
이후 - 죄송합니다. 그것은 나중에 문제가 될 것입니다.
이제, 우리는 다음과 같이 보이는, ins->prev = curr;
을 수행
curr
|
v
+----------+ +----------+
| next | -----------+ | next | --> ...
+----------+ | +----------+
... <-- | prev | <----------+----------- | prev | <-- ...
+----------+ v +----------+
^ +----------+
| | next |
| +----------+
+---------- | prev |
+----------+
^
|
ins
지금, 우리는 ins->next = curr->next;
물품. 그러나 웁스! ins
해당 curr->next
점을 주목, 그래서 우리는 여기에 사이클을 추가 :
curr
|
v
+----------+ +----------+
| next | -----------+ | next | --> ...
+----------+ | +----------+
... <-- | prev | <----------+----------- | prev | <-- ...
+----------+ v +----------+
^ +----------+
| | next | --+
| +----------+ |
+---------- | prev | <-+
+----------+
^
|
ins
을 그리고 마지막으로, 당신은 그러나 죄송합니다 cur->next->prev = ins;
쓰기!
curr
|
v
+----------+ +----------+
| next | -----------+ | next | --> ...
+----------+ | +----------+
... <-- | prev | <----------+----------- | prev | <-- ...
+----------+ v +----------+
+----------+
+-> | next | --+
| +----------+ |
+-- | prev | <-+
+----------+
^
|
ins
여기서 문제는 당신이 바로 그 장소에서 볼 수있는 능력을 잃게 있도록, 처음 할당 한 후 curr->next
에 의해 지적했다 셀의 트랙을 잃을 것입니다 : curr->next
은 여전히 prev
, 그래서 우리는 또 다른주기를 얻는다.
이렇게 작성하면 어떻게됩니까?
DList* next = curr->next;
후 다음 상황 중 일부에 next
대신 curr->next
을 사용할 수 있습니까?
'ins-> next = cur-> next'를 할 때 이미'cur-> next = ins'을 설정했습니다. 그래서 당신은'ins-> next == ins'로 끝납니다 –
@IgorTandetnik step-2-1은 후크 인과 원래의 cur-> 다음 노드로 설정되어 있습니다. 그래서 두 개가 있습니다. 둘 다 연결해야합니다. –
글쎄, 네, 그게 당신의 의도입니다 -하지만 그때까지 원래의''cur-> next' 노드에 대한 포인터를 잃어 버렸습니다. 'cur-> next'는 원래의 노드를 가리키는 것이 아니라'ins'를 가리 킵니다. –