我正在尝试在我的类中编写一个函数,该函数接收一个节点并在双链表中直接删除该节点。我有单独的函数删除第一个或最后一个节点,所以这只是在中间节点的情况下。我认为它的逻辑是有意义的,我的代码编译,但当我尝试测试它时,程序永远不会停止运行,所以我认为它会陷入while循环。我也不确定我是否正确调用了该函数。在由DLL
,1
,2
和3
填充的名为4
的双重链接列表中,我尝试通过{3
删除DLL.removeAfter(2)
主要是{1}}。我看到这在逻辑上是有缺陷的,因为列表中可能存在多个2
,但我不知道什么是正确的。
void DoublyLinkedList::removeAfter(const DListNode &p)
{
DListNode *node = header.next;
while(node != &p)
{
node->next; //iterate to p;
}
node->next; //Get to the node after p that is to be deleted
node->prev->next = node->next;
node->next->prev = node->prev;
delete node;
}
答案 0 :(得分:0)
我认为您要将 .section __TEXT,__text,regular,pure_instructions
.macosx_version_min 10, 12
.globl _main
.p2align 4, 0x90
_main: ## @main
.cfi_startproc
## BB#0:
pushq %rbp
Ltmp0:
.cfi_def_cfa_offset 16
Ltmp1:
.cfi_offset %rbp, -16
movq %rsp, %rbp
Ltmp2:
.cfi_def_cfa_register %rbp
subq $16, %rsp
movl $20, -8(%rbp)
movl $30, -4(%rbp)
leaq L_.str(%rip), %rdi
movl $10, %esi
xorl %eax, %eax
callq _printf
xorl %eax, %eax
addq $16, %rsp
popq %rbp
retq
.cfi_endproc
.section __TEXT,__cstring,cstring_literals
L_.str: ## @.str
.asciz "%d %d %d\n"
.subsections_via_symbols
的两个实例替换为node->next
,否则您永远不会更改node = node->next
的值。
答案 1 :(得分:0)
void DoublyLinkedList::removeAfter(const DListNode &p)
{
DListNode *node = header.next;
while(node != &p) {
node = node->next; //iterate to p;
}
DListNode* del_note = node->next; //Get to the node after p that is to be deleted
node->next = del_note->next;
del_note->next->prev = node;
delete del_note;
}
当然,这只会在找到第一个元素时找到while
个中断。
答案 2 :(得分:0)
public class MyStartServiceReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.e("AlarmReceiver", "Started");
Intent intent1 = new Intent(context, AlarmService.class);
intent1.setData(Uri.parse("custom://" + System.currentTimeMillis()));
context.startService(intent1);
}
}