每天一个小算法(4)----在O(1)时间删除指定结点

O(1)时间内删除结点的思路只能是复制该结点下一个结点的数据,然后删除该结点的下一个结点,来等效删除此结点。

需要注意的地方是删除头结点和尾结点的处理。

 1 #include <stdio.h>

 2 #include <time.h>

 3 #include <stdlib.h>

 4 typedef struct Node

 5 {

 6     int data;

 7     Node* next;

 8 }Node, *List;

 9 

10 List createList(int num) //随机生成数字,构造链表

11 {

12     List aList = (List)malloc(sizeof(Node));

13     aList->next = NULL;

14     aList->data = 0;

15     Node* qT = aList;

16 

17      // srand((int)time(0));

18      for ( int i=0; i< num; ++i)

19      {

20          Node* pTN = (Node*)malloc(sizeof(Node));

21          pTN->data = rand()%100;

22          pTN->next = NULL;

23          qT->next = pTN;

24          qT = pTN;

25      }

26      return aList;

27 }

28 

29 void printList(List aList)    //打印链表

30 {

31     if ( aList == NULL || aList->next == NULL )

32         return;

33 

34     Node* pT = aList->next;

35     printf("element of list:\n\t");

36     while( pT != NULL )

37     {

38         printf("%d ", pT->data);

39         pT = pT->next;

40     }

41 

42     printf("\n");

43 }

44 

45 void deleteList(List aList)    //删除链表

46 {}

47 

48 

49 //删除结点主算法

50 void deleteNode(List aList, Node* pNode)

51 {

52     if ( aList == NULL || pNode == NULL )

53         return;

54 

55     if ( aList == pNode )

56     {

57         printf("refuse to delete head node\n");

58         return;

59     }

60 

61     if ( pNode->next == NULL )

62     {

63         Node* pT = aList->next;

64         while ( pT->next != NULL )

65         {

66             pT = pT->next;

67         }

68 

69         delete pNode;

70         pT->next == NULL;

71     }

72 

73     Node* pN = pNode->next;

74     pNode->data = pNode->next->data;

75     pNode->next = pNode->next->next;

76 

77     delete pN;

78 }

79 

80 int main(int argc, char const *argv[])

81 {

82      srand((int)time(0));

83     List aList = createList(5);

84     printList(aList);

85     deleteNode(aList,aList->next->next);

86     printList(aList);

87     deleteList(aList);

88     

89     return 0;

90 }

 

你可能感兴趣的:(算法)