-
测试程序 main.c
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #define true 1 #define false 0 typedef int ElementType; typedef int bool; typedef struct LNode *List; typedef struct LNode *PLNode; struct LNode { ElementType Data; PLNode Next; }; int main( int argc, char *argv[] ) { List L = NULL; AddNode( L, 11 ); AddNode( L, 12 ); AddNode( L, 13 ); if ( L ) { printf( "addNode success\n" ); } else { printf( "addNode failed\n" ); } TravelList( L ); printf( "the value of node is [%d]", L->Next->Data ); DeleteNode( L, 10 ); return 0; }
-
从链表的末尾添加节点
List AddNode( List L, ElementType x ) { List TempL = L; List node = ( List )malloc( sizeof( struct LNode ) ); if ( NULL == node ) { printf( "malloc error\n" ); return NULL; } node->Data = x; node->Next = NULL; // Linkedlist is empty if ( NULL == TempL ) { TempL = node; return TempL; } while ( TempL->Next ) { TempL = TempL->Next; } TempL->Next = node; return L; }
-
删除链表节点
void DeleteNode( List L, ElementType x ) { List tmpNode = NULL; List delNode = NULL; if ( NULL == L ) { printf( "linkedList is empty \n"); return ; } while ( L && L->Data != x ) { tmpNode = L; L = L->Next; } if ( NULL == L ) { printf("element not exists\n"); } else { printf( "delete node is [%d]", L->Data ); delNode = L; // delete header if ( NULL == tmpNode ) { L = delNode->Next; } else { tmpNode->Next = L->Next; } free( delNode ); } return ; }
-
链表中倒数第K个节点
bool IsEmptyList( List L ) { return L == NULL ? true : false; } void DeleteTailKthNode( List L, int k ) { int n = 0; List tmpNode = L; PLNode delNode = NULL; if ( IsEmptyList( L ) ) { printf( "LinkedList is empty" ); return ; } while ( k > 0 && n < k && NULL != L ) { if ( ++n == k ) { delNode = L; break; } tmpNode = L; L = L->Next; } printf( "deleteNode value is [%d]", delNode->Data ); // delete header if ( NULL == tmpNode ) { L = delNode->Next; } else { tmpNode->Next = delNode->Next; } free( delNode ); return ; }
-
反转链表
List ReverseList( List L ) { List newList = NULL; List curNode = L; List tmpNode = NULL; while ( curNode != NULL ) { List tmpNode = curNode; curNode = curNode->Next; tmpNode->Next = newList; newList = tmpNode; } return newList; }
-
从尾到头打印链表
void TravelList( List L ) { if ( IsEmptyList( L ) ) { printf("LinkedList is empty\n"); return ; } printf("traveling LinkedList value : "); while ( L ) { printf("%d ", L->Data); L = L->Next; } printf("\n"); return ; }
-
合并两个排序的链表
-
两个链表的第一个公共节点
-
判断两个链表是否有环相关问题
链表常见面试集合
最新推荐文章于 2024-08-17 15:11:06 发布