在我从面试问题中学习算法的过程中,我发现这非常有趣。
基本上问题是要求删除索引处的节点,但是从链表的末尾开始。并在一个循环中。
我想你需要2个循环,一个知道列表的长度,另一个是删除节点,从最后开始,但后来我认为链表是顺序的,所以一个循环应该有效。
您将如何以最简单的方式解决这个问题?我正在尝试使用python;你可以创建一个简单的列表,并在4行中进行操作;但如果你正在接受采访,他们通常会希望你“不用手语”而不使用语言快捷方式。
答案 0 :(得分:0)
struct ListNode* removeNthFromEnd(struct ListNode* head, int n) {
struct ListNode *temp = head;
int length = 0;
while(temp->next!=NULL){
temp = temp->next;
length++;
}
temp = head;
while(length!= n+1){
temp = temp->next;
length--;
}
temp->next = temp->next->next;
return head;
}
编辑: 最初我使用第一个while循环计算链表的长度,然后我递减该长度,直到我使用第二个while循环到达上述节点之前的节点,然后我只是删除节点并返回头; < / p>