/*剑指offer p119 面试题18
在O(1)时间内删除链表结点 */
#include<stdio.h>
#include<malloc.h>
typedef struct node
{
int data;
struct node *next;
} LinkNode;
LinkNode * createLinkList()
{
LinkNode *p,*t,*h;
int x;
h=(LinkNode *)malloc(sizeof(LinkNode));
h->next=NULL;
t=h;
printf("请输入要创建的节点的值");
scanf("%d",&x);
while(x!=-1)
{
p=(LinkNode *)malloc(sizeof(LinkNode));
p->data=x;
p->next=NULL;
t->next=p;
t=p;
scanf("%d",&x);
}
return h;
}
void printLinkList(LinkNode *h)
{
LinkNode *p;
for(p=h->next;p;p=p->next)
printf("%d ",p->data);
}
LinkNode* deleteNode(LinkNode *h,LinkNode *p)
{
LinkNode *q;
if(p->next==NULL)
{
for(q=h;q->next!=p;q=q->next);
q->next=p->next;
free(p);
}
else
{
p->data=p->next->data;
q=p->next;
p->next=q->next;
free(q);
}
return h;
}
int main(void)
{
LinkNode * head,*p;
head=createLinkList();
//先给定一个链表的节点
p=head->next;
// p=head->next->next->next->next;
deleteNode(head,p);
printLinkList(head);
}
上面这个代码是用c语言实现的,本题同时也是LeetCode中的一个题,目前序号是237,后续可能有改变
使用Java实现的代码如下:
public void deleteNode(Num203.ListNode node) {
node.val=node.next.val;
node.next=node.next.next;
}
总体而言的思想就是把当前节点的下一个值存放在当前结点的位置,然后删除当前值的结点