如果我们åªçŸ¥é“最åŽä¸€ä¸ªèŠ‚点的地å€ï¼Œæˆ‘们å¯ä»¥åˆ é™¤å•é“¾æŽ¥åˆ—表的最åŽä¸€ä¸ªèŠ‚点å—?

时间:2012-02-15 05:19:17

标签: singly-linked-list

//å˜é‡

typedef struct node 
 { 
    int value; 
    struct node *next; 
 }mynode;

// Globals(ä¸æ˜¯å¿…需的)。

mynode *head, *tail, *temp; 

//功能

void add(int value);

//将新节点添加到链表

的功能
 void add(int value)
 {
    temp = (mynode *) malloc(sizeof(struct node));
    temp->next=(mynode *)0;
    temp->value=value;

    if(head==(mynode *)0)
    {
       head=temp;
       tail=temp;
    }
    else
    {
      tail->next=temp;
      tail=temp;
    }
 }

// main()函数

int main()
 {
     head=(mynode *)0;

     // Construct the linked list.
     add(1);
     add(2);
     add(3);

     return(0);
 }

如果我åªæœ‰ä¸€ä¸ªæŒ‡å‘节点的指针,其值为3(上述代ç ä¸­æ˜¾ç¤ºçš„最åŽä¸€ä¸ªèŠ‚点),我们å¯ä»¥åˆ é™¤å®ƒå¹¶å°†ä¸€ä¸ªå€¼ä¸º2(上述代ç ï¼‰çš„节点作为最åŽä¸€ä¸ªèŠ‚点。

5 个答案:

答案 0 :(得分:2)

ä¸ï¼Œä½ ä¸èƒ½ã€‚除éžä½ å¯¹å‰ä¸€ä¸ªèŠ‚点有一些å‚考。åƒå¤´æŒ‡é’ˆã€‚如果你有其他å‚考比它更容易。事实上,如果你没有任何指针,你将会æ¾å¼€åˆ—表本身

答案 1 :(得分:0)

ä¸ï¼Œä½†å¦‚果你知é“自己在åšä»€ä¹ˆï¼Œå°±å¯ä»¥å°±åœ°ä¿®æ”¹æœ€åŽä¸€ä¸ªèŠ‚点。删除最åŽä¸€ä¸ªèŠ‚点需è¦è®¿é—®å€’数第二个节点,特别是它到最åŽä¸€ä¸ªèŠ‚点的链接。

答案 2 :(得分:0)

是的,你å¯ä»¥..å°è¯•ä»¥ä¸‹ä»£ç ï¼š

void deleteNode()
{
    mynode *temp1;
    for(temp1 = head; temp->next!= tail; temp1 = temp1->next);
    tail = temp1;
    free(tail->next);
}

它将删除最åŽä¸€ä¸ªèŠ‚点。

答案 3 :(得分:0)

答案是å¦å®šçš„。

您å¯ä»¥åœ¨æŒ‡å‘最åŽä¸€ä¸ªèŠ‚点的指针上调用free,但这åªæ˜¯æ„味ç€ä¸å†å£°æ˜Žè¯¥èŠ‚点å ç”¨çš„内存。数æ®å¾ˆå¯èƒ½ä¼šåœ¨ä¸€æ®µæ—¶é—´å†…ä¿æŒä¸å˜ã€‚è¿™æ„味ç€å€’数第二个节点指å‘它的指针ä»ç„¶æœ‰æ•ˆï¼Œå³ä½¿å®ƒä¸åº”该。

è¦ä»¥å¯¹åˆ—表有æ„义的方å¼åˆ é™¤èŠ‚点,必须使倒数第二个节点中包å«çš„指针无效。除éžå¯ä»¥é€šè¿‡æŒ‡å‘它的直接指针或通过从å‰ä¸€ä¸ªèŠ‚点é历列表æ¥è®¿é—®å€’数第二个节点,å¦åˆ™æ— æ³•å®Œæˆã€‚

答案 4 :(得分:0)

您å¯ä»¥ä½¿ç”¨åŒå‘链表æ¥è®¿é—®ä¸Šä¸€ä¸ªèŠ‚点。或者é历整个列表。